2016-06-28 187 views
1

我尝试运行下面的代码:OpenCV的INRANGE()函数

#include<opencv\cv.h> 
#include<opencv\highgui.h> 

using namespace cv; 


int main() { 

    VideoCapture cap; 
    cap.open(0); 


    while (1) { 

Mat src; 
Mat threshold; 

cap.read(src); 

inRange(src, Scalar(0, 0, 0), Scalar(255, 0, 0), threshold); 
imshow("thr", threshold); 
imshow("hsv", src); 

     waitKey(33); 
    } 
    return 0; 
} 

但好像它不筛选,因为只有当我运行的代码出现一个空白窗口。

如何获取该代码来检测红色?

+0

你能看到你的源图像吗?或一个黑色的窗口? –

+0

谢谢你的回复,我正确地看到源图片。 – Danaro

+0

你忘了转换成hsv的'src'图像; D另外,在OpenCV中使用BGR,而不是RGB,因此你要设置蓝色通道。因此,在BGR中,你的阈值应该是这样的:inRange(src,Scalar(0,0,0),Scalar(50,50,255),threshold);'更好地使用HSV色彩空间,参见重复 – Miki

回答

0

您必须修改inRange功能是这样的:

inRange(src, Scalar(0, 0, 0), Scalar(255, 255, 255), threshold); 

如果您尝试门槛只是第一个通道(蓝色通道),那么你就必须做出其他渠道免费的,所以在将其设置为0lawerb及其dtype,通常为255np.uint8

例如

inRange(src, Scalar(0, 50, 0), Scalar(255, 100, 255), threshold); 

这条线会比较第二个通道(绿色通道)并忽略其他通道。