OpenCV中的inRange()函数

3

我尝试运行以下代码:

#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;
}

但是似乎它没有过滤,因为当我运行代码时只有一个空白窗口出现。

如何让这段代码检测红色?


你能正常看到源图像吗?还是只有一个黑色窗口? - K.M. Shihab Uddin
谢谢您的回复,我已经正确地看到了源图像。 - Danaro
谢谢您的回复,我尝试使用您提供的建议,但它也过滤并显示许多其他原本不是红色的捕获对象,有没有办法使过滤更准确?顺便问一下,为什么我不能使用:inRange(src,Scalar(0,0,0),Scalar(0,0,255),threshold);? - Danaro
@Miki opencv c++ Scalar 是以HSV格式还是BGR格式呈现的? - user924
@user 标量就是数字。 - Miki
显示剩余2条评论
1个回答

2
您需要修改inRange函数,像这样进行修改:
inRange(src, Scalar(0, 0, 0), Scalar(255, 255, 255), threshold);

如果您只试图对第一个通道(蓝色通道)进行阈值处理,则必须使其他通道空闲,因此在lawerb及其dtype中将其设置为0,通常np.uint8255

例如:

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

这行代码将比较第二个通道(绿色通道)并忽略其他通道。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接