我在网上搜索,虽然我可以找到一些讨论,但我没有找到全面的描述.因此,如果任何人都可以形成一个涵盖指针大小的答案,那将会有很大的帮助.答案至少应包括以下主题
我有一个尺寸为320x320像素的阈值图像.通过设置ROI,我以20x20像素的块循环遍历整个图像.我需要找到每个块的平均值.所以我将这些图像块传递给函数'cvAvg'.我面临以下问题.
'cvAvg'的返回类型是'CvScalar',它有4个双打.我无法解释文档中的CvScalar.我只需要像"浮动"或"双倍"格式的像素的单个平均值,我需要做出其他决定.如何从函数返回值中提取单个值.我不想迭代所有像素并找到平均值.我想以20x20的块进行处理.例如:如果在20x20的块中200像素是白色且200像素是黑色,我希望能够提取单个值,以便我可以确定块具有50%的白色像素并且我认为平均值/平均值这将是一个很好的了解方式.
我创建了一个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次.这里发生了什么?代码如下.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 = …Run Code Online (Sandbox Code Playgroud)