【发布时间】:2014-09-26 05:05:56
【问题描述】:
我有一个CvVideoCamera,我正在尝试检测每个帧中的蓝色,并且输出帧应该只包含蓝色对象,例如here。我在委托方法中这样做:
- (void)processImage:(cv::Mat&)image
{
cv::Mat bgrMat;
cvtColor(image, bgrMat, CV_BGRA2BGR);
// Covert color space to HSV
cv::Mat hsvMat;
cvtColor(bgrMat, hsvMat, CV_BGR2HSV);
// Threshold the HSV image
cv::Mat blueMask;
cv::Scalar lower_blue(110, 50, 50);
cv::Scalar upper_blue(130, 255, 255);
cv::inRange(hsvMat, lower_blue, upper_blue, blueMask);
bitwise_and(bgrMat, bgrMat, image, blueMask);
}
原图:
结果:
蓝色检测似乎工作正常,但最终结果是红色而不是蓝色。任何想法为什么?我是否正确使用了bitwise_and?
[编辑]
这些行可以解决问题:
cv::Mat output;
image.copyTo(output, blueMask);
output.copyTo(image);
代替:
bitwise_and(bgrMat, bgrMat, image, blueMask);
感谢karlphillip 的建议。出于某种原因,bgrMat 在此过程中被“改变”了,所以我改用原来的image。
【问题讨论】:
标签: ios image opencv image-processing extract