2012-06-09 67 views
1

我在這兩個鏈接中發出了同樣的問題:one,two。我需要計算圖像中的小ROI上的像素強度平均值。等效於OpenVV C++接口中的cvAvg

我選擇了ROI並將圖像複製到其中,所以現在我需要計算像素平均亮度,避免在所有像素上出現循環。

鏈接中提供的答案建議使用CvScalar c = cvAvg(img);,但我找不到使用C++接口的等效項。

請問你能指出一下嗎?我無法在文檔中找到它!

回答

15

我提供的代碼片段解決問題:

//defines roi 
cv::Rect roi(roiVertexXCoordinate, roiVertexYCoordinate, roiWidth, roiHeight); 

//copies input image in roi 
cv::Mat image_roi = inputImage(roi); 

//computes mean over roi 
cv::Scalar avgPixelIntensity = cv::mean(image_roi); 

//prints out only .val[0] since image was grayscale 
cout << "Pixel intensity over ROI = " << avgPixelIntensity.val[0] << endl; 
+0

對不起,我不知道C++。如果它適合你,那就意味着它有效。我只使用Python,你可以在這裏找到所有的輪廓特徵,包括平均值:http://opencvpython.blogspot.com/2012/04/contour-features.html –

+0

+1:謝謝!很棒。 –

7

對於C++使用mean function

http://docs.opencv.org/modules/core/doc/operations_on_arrays.html?highlight=avg#mean

Calculates an average (mean) of array elements. 

C++: Scalar mean(InputArray src, InputArray mask=noArray()) 

Python: cv2.mean(src[, mask]) → retval 

C: CvScalar cvAvg(const CvArr* arr,const CvArr* mask=NULL) 

Python: cv.Avg(arr, mask=None) → scalar 
+0

好了,它會返回標是像素強度平均值在輸入的形象呢? – Matteo

+0

分別計算每個通道的平均值。你可以使用掩碼來尋找ROI的平均值。 –

+0

好的我c ...我忘了提及圖像是灰度的,所以在這種情況下,它只會通過該通道返回強度。 btw文檔在[opencv 2.1](http://opencv.willowgarage.com/documentation/cpp/core_operations_on_arrays.html#cv-mean)是不同的,怎麼回事? – Matteo