我有一个Qt的应用程序,我必须找到一对夫妇周围点击坐标像素的HSV范围,跟踪以后。我这样做:的OpenCV - 奇HSV范围检测
cv::Mat temp;
cv::cvtColor(frame, temp, CV_BGR2HSV); //frame is pulled from a video or jpeg
cv::Vec3b hsv=temp.at<cv::Vec3b>(frameX,frameY); //sometimes SIGSEGV?
qDebug() << hsv.val[0]; //look up H
qDebug() << hsv.val[1]; //look up S
qDebug() << hsv.val[2]; //look up V
//just base values so far, will work on range later
emit hsvDownloaded(hsv.val[0], hsv.val[0]+5, hsv.val[1], 255, hsv.val[2], 255); //send to GUI which automaticly updates worker thread
现在,事情很奇怪。这些都是结果(红色圆圈表示的点击位置):
以红这很奇怪,正确检测形状的上半部分,下半部分是不,尽管它是同色的固体物质。
和用于实际测试
它检测HSV {95,196,248}
其是坦率荒谬(基值太高)。没有检测到的像素甚至不是被点击的像素。检测该球100%的最佳值是H:35-141 S:0-238 V:65-255
。我想要从归一化的直方图中获得HSV范围,但我甚至无法获得正确的基准值。这是怎么回事?当OpenCV使用kalibrowanyPlik.read(frame);
拉框时,默认的配色方案是BGR,对吧?
为什么会产生颜色检测工作,以便随机?
'cv :: Vec3b hsv = temp.at(frameX,frameY); //有时候是SIGSEGV?' - 欢迎来到行,列世界!你必须使用'at (y,x);' –
berak
或cv :: Vec3b hsv = temp.at(cv :: Point(frameX,frameY)); –
Micka
@Micka cv :: Point(x,y)它是。哈,这样一个简单的错误。谢谢。继续并按照berak的建议写出答案 – Petersaber