Я вижу, есть похожие вопросы к этому, но не отвечайте на то, что я прошу, поэтому вот мой вопрос.Различные пиксельные значения в MATLAB и C++ с OpenCV
В C++ с OpenCV Я запускаю код, который я приведу ниже, и возвращает среднее значение пикселя 6.32. Однако, когда я открываю изображение и использую среднюю функцию в MATLAB, он возвращает среднюю интенсивность пикселя приблизительно 6.92ish. Как вы можете видеть, я конвертирую значения OpenCV в double, чтобы попытаться облегчить эту проблему, и обнаружил, что openCV загружает изображение в виде набора целых чисел, тогда как MATLAB загружает изображение как десятичные значения, которые приблизительно, но не совсем такие же, как целые числа , Итак, мой вопрос, новичок в кодировании, что правильно? Я предполагаю, что MATLAB возвращает более точные значения, и если это так, я хотел бы знать, есть ли способ загрузить изображения таким же образом, чтобы избежать расхождения.
Спасибо, код ниже
Mat img = imread("Cells2.tif");
cv::cvtColor(img, img, CV_BGR2GRAY);
cv::imshow("stuff",img);
Mat dst;
if(img.channels() == 3)
{
img.convertTo(dst, CV_64FC1);
}
else if (img.channels() == 1)
{
img.convertTo(dst, CV_64FC1);
}
cv::imshow("output",dst/255);
int NumPixels = img.total();
double avg;
double c = 0;
double std;
for(int y = 0; y < dst.cols; y++)
{
for(int x = 0; x < dst.rows; x++)
{
c+=dst.at<double>(x,y)*255;
}
}
avg = c/NumPixels;
cout << "asfa = " << c << endl;
double deviation;
double var;
double z = 0;
double q;
//for(int a = 0; a<= img.cols; a++)
for(int y = 0; y< dst.cols; y++)
{
//for(int b = 0; b<= dst.rows; b++)
for(int x = 0; x< dst.rows; x++)
{
q=dst.at<double>(x,y);
deviation = q - avg;
z = z + pow(deviation,2);
//cout << "q = " << q << endl;
}
}
var = z/(NumPixels);
std = sqrt(var);
cv::Scalar avgPixel = cv::mean(dst);
cout << "Avg Value = " << avg << endl;
cout << "StdDev = " << std << endl;
cout << "AvgPixel =" << avgPixel;
cvWaitKey(0);
return 0;
}
MATLAB может обнаруживать диапазон значений пикселей в предположении, самая высокая значение составляет 100% яркости. Если самое яркое значение составляет около 233, это объясняет разницу. –
Есть ли способ учета и прекращения несоответствия? – VeniVici
Можете ли вы показать свой код Matlab для вычисления средней интенсивности пикселей изображения? – Alexey