Я делаю проект для Android, в котором у меня есть две точки на картинке, и мне нужно рассчитать среднее значение ч/б обеих точек. Один маленький и слегка прозрачный, другой темный и большой круг (точка). Итак, я хочу рассчитать среднее значение ч/б или разницу ч/б. Цвет точек красный. Я делаю это в Matlab, создавая гистограмму и выбирая обе гистограммы. Matlab дает мне площадь под кривой, после чего я легко вычисляю разницу или усредняю ч/б два изображения. Я сделал гистограмму, но не смог получить среднее ч/б две точки. Мой код гистограммы Opencv
Mat rgba = new Mat();
Utils.bitmapToMat(bitmap, rgba);
// Get the bitmap size.
Size rgbaSize = rgba.size();
// Set the amount of bars in the histogram.
int histSize = 256;
MatOfInt histogramSize = new MatOfInt(histSize);
// Set the height of the histogram and width of the bar.
int histogramHeight = (int) rgbaSize.height;
int binWidth = 5;
// Set the value range.
MatOfFloat histogramRange = new MatOfFloat(0f, 256f);
// Create two separate lists: one for colors and one for channels (these will be used as separate datasets).
Scalar[] colorsRgb = new Scalar[]{new Scalar(220, 0, 0, 255), new Scalar(0, 200, 0, 255), new Scalar(0, 0, 200, 255)};
MatOfInt[] channels = new MatOfInt[]{new MatOfInt(0), new MatOfInt(1), new MatOfInt(2)};
// Create an array to be saved in the histogram and a second array, on which the histogram chart will be drawn.
Mat[] histograms = new Mat[]{new Mat(), new Mat(), new Mat()};
Mat histMatBitmap = new Mat(rgbaSize, CvType.CV_8UC3, new Scalar(256, 256, 256));
// Mat histMatBitmap = new Mat(rgbaSize, rgba.type());
for ( int i = 0; i < channels.length; i++ ) {
Imgproc.calcHist(Collections.singletonList(rgba), channels[0], new Mat(), histograms[i], histogramSize, histogramRange);
Core.normalize(histograms[i], histograms[i], histogramHeight, 0, Core.NORM_INF);
for ( int j = 0; j < histSize; j++ ) {
Point p1 = new Point(binWidth * (j - 1), histogramHeight - Math.round(histograms[i].get(j - 1, 0)[0]));
Point p2 = new Point(binWidth * j, histogramHeight - Math.round(histograms[i].get(j, 0)[0]));
Imgproc.line(histMatBitmap, p1, p2, colorsRgb[0], 3, 8, 0);
}
}
//convert Mat to bitmap
Bitmap graphBitmap = Bitmap.createBitmap(histMatBitmap.cols(), histMatBitmap.rows(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(histMatBitmap, graphBitmap);
// show histogram
histogramImageView.setImageBitmap(graphBitmap)
Исходный код Связь
Мое изображение введите описание изображения здесь
и результирующее изображение введите описание изображения здесь
Пожалуйста, проверьте, что я загрузил
Не уверен, что действительно понимаю проблему - площадь гистограммы - это просто сумма полей гистограммы; высота определяется количеством, а ширина определяется шириной бункеров. Вы можете просто вычислить его с помощью простого цикла for, перебирая каждую ячейку на гистограмме.




Предоставьте минимальный, полный и проверяемый пример и примеры изображений. Кроме того, возможно, добавьте изображения, результаты и т. д. из ваших успешных примеров Matlab, чтобы дополнительно проиллюстрировать, чего вы точно хотите достичь.