我正在尝试将我的程序设置为颜色的阈值(以BGR格式)。我还没有完全确定我要找的颜色。我还想让程序记录它检测到的那种颜色的像素数。到目前为止,我的代码如下,但它无效。
#include "cv.h"
#include "highgui.h"
int main()
{
// Initialize capturing live feed from the camera
CvCapture* capture = 0;
capture = cvCaptureFromCAM(0);
// Couldn't get a device? Throw an error and quit
if(!capture)
{
printf("Could not initialize capturing...\n");
return -1;
}
// The two windows we'll be using
cvNamedWindow("video");
cvNamedWindow("thresh");
// An infinite loop
while(true)
{
// Will hold a frame captured from the camera
IplImage* frame = 0;
frame = cvQueryFrame(capture);
// If we couldn't grab a frame... quit
if(!frame)
break;
//create image where threshloded image will be stored
IplImage* imgThreshed = cvCreateImage(cvGetSize(frame), 8, 1);
//i want to keep it BGR format. Im not sure what colour i will be looking for yet. this can be easily changed
cvInRangeS(frame, cvScalar(20, 100, 100), cvScalar(30, 255, 255), imgThreshed);
//show the original feed and thresholded feed
cvShowImage("thresh", imgThreshed);
cvShowImage("video", frame);
// Wait for a keypress
int c = cvWaitKey(10);
if(c!=-1)
{
// If pressed, break out of the loop
break;
}
cvReleaseImage(&imgThreshed);
}
cvReleaseCapture(&capture);
return 0;
}
答案 0 :(得分:3)
要获得颜色的阈值,
1)将图像转换为HSV
2)然后应用cvInrangeS
3)获得阈值图像后,您可以计算其中的白色像素数。
尝试使用本教程跟踪黄色:Tracking colored objects in OpenCV
答案 1 :(得分:2)
我可以告诉你如何在Python和C ++中使用和不使用和转换为HSV。
C ++版本(转换为HSV)
将图像转换为HSV图像:
// Convert the image into an HSV image
IplImage* imgHSV = cvCreateImage(cvGetSize(img), 8, 3);
cvCvtColor(img, imgHSV, CV_BGR2HSV);
创建一个新图像,用于保存带图像的图像:
IplImage* imgThreshed = cvCreateImage(cvGetSize(img), 8, 1);
使用cvInRangeS进行实际阈值处理
cvInRangeS(imgHSV, cvScalar(20, 100, 100), cvScalar(30, 255, 255), imgThreshed);
这里,imgHSV是参考图像。并且两个cvScalars表示颜色为黄色的值的下限和上限。 (这些边界几乎适用于所有条件。如果不是,请尝试尝试最后两个值。)
考虑任何像素。如果该像素的所有三个值(H,S和V,按此顺序)位于所述范围内,则imgThreshed在该对应像素处获得值255。对所有像素重复此操作。所以你最终得到的是一个阈值图像。
countNonZero
计算阈值图像中的白色像素数。Python版(不转换为HSV):
import numpy as np
) lower = np.array((a,b,c), dtype = "uint8")
upper = np.array((x,y,z), dtype = "uint8")
在上面(a,b,c)
是下限,(x,y,z)
是上限。
2.获取满足范围的像素的掩码:
mask = cv2.inRange(image, lower, upper)
在上文中,image
是您想要工作的图像。
countNonZero
计算蒙版中存在的白色像素数: yellowpixels = cv2.countNonZero(mask)
print "Number of Yellow pixels are %d" % (yellowpixels)
来源: