gpt4 book ai didi

opencv - 如何使用 cvAvg 或 mean 计算一组 ROI 中像素的 'single' 平均值/平均值?

转载 作者:太空宇宙 更新时间:2023-11-03 21:03:19 30 4
gpt4 key购买 nike

我有一个大小为 320x320 像素的阈值图像。我通过设置 ROI 以 20x20 像素的 block 循环遍历整个图像。我需要找到每个 block 的平均值。所以我将这些图像 block 传递给函数“cvAvg”。我面临以下问题。

  1. “cvAvg”的返回类型是“CvScalar”,它有 4 个 double 。我无法从文档中解释 CvScalar。我只需要一个像素的平均值,格式可能是“float”或“double”,我需要根据它做出其他决定。如何从函数返回值中提取单个值。我不想遍历所有像素并找到平均值。我想以 20x20 的 block 为单位进行处理。例如:如果在 20x20 的 block 中有 200 个像素是白色的,200 个像素是黑色的,我希望能够提取单个值,以便我可以决定该 block 有 50% 的白色像素,我认为是均值/平均值将是一个很好的了解方式。

  2. 我创建了一个 CvScalar 类型的变量来检索和打印函数“cvAvg”返回的值。但是阈值图像的所有值都是相同的

0.000000 255.000000 0.000000 0.000000

0.000000 255.000000 0.000000 0.000000

0.000000 255.000000 0.000000 0.000000

0.000000 255.000000 0.000000 0.000000

这将持续 256 次以循环遍历图像的所有 block ,这可能是不正确的,因为阈值图像具有不同的白色和黑色部分。这里发生了什么?下面的代码。 imgGreenThresh 是绿色阈值的“二进制图像”。

IplImage* imgDummy = cvCreateImage(cvGetSize(imgGreenThresh), 8, 1);    //Create a dummy image of the same size as thresholded image
cvCopy(imgGreenThresh, imgDummy); //Copy the thresholded image for further operations
CvRect roi; //Rectangular ROI
CvSize size;
int r, c, N=20;
int count = 0;
float LaserState[16][16]; //Create 16x16 matrix to hold the laser state values.
CvScalar meanValue; // individual windows mean value

size = cvGetSize(imgDummy); //returns image ROI, in other words, height and width of matrix
//Iteratively send the different ROIs for processing.
for (r = 0; r < size.height; r += N)
for (c = 0; c < size.width; c += N)
{
count++;
roi.x = c;
roi.y = r;
roi.width = (c + N > size.width) ? (size.width - c) : N;
roi.height = (r + N > size.height) ? (size.height - r) : N;
cvSetImageROI(imgDummy, roi);
meanValue = cvAvg(imgDummy);
printf("%f\t%f\t%f\t%f\n", meanValue);
cvResetImageROI(imgDummy);

}
//cvResetImageROI(imgDummy); //Do not forget to reset ROIs

谢谢!

苏希尔。

最佳答案

我计算单个 channel 平均值的解决方案可以在以下链接中找到: Average values of a single channel

对于您的情况,您拥有投资返回率而不是单一 channel 。在 OpenCV 中,ROI 也是一个 Mat 对象(如果您使用的是 OpenCV 的 C++ 代码),您可以将其传递给 cv::mean(...) 函数以取回标量对象。只有该对象的第一个条目将正确设置为您的 ROI 的平均值,这就是您想要的值。有关详细信息,请参阅上面的链接。

关于opencv - 如何使用 cvAvg 或 mean 计算一组 ROI 中像素的 'single' 平均值/平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17950459/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com