作为某种“度假项目”,我在玩OpenCV并希望检测和测量内容。OpenCV C++/Obj-C:适当的对象检测
当前工作流(早期 - 检测):
- 转换为灰度(CV :: cvtColor)
- 应用自适应阈值(CV :: adaptiveThreshold)
- 应用Canny边缘检测(CV: :康力)
- 寻找轮廓(CV :: findContours)
我的结果是有点蹩脚,我不知道什么是右击t方向走。我已经有cvBlob在我当前的设置下工作(OSX 10.7.2,Xcode 4.2.1)是否更好?如果是这样,我该如何正确实施?
或者我需要先扣除背景吗?我试过,但没能找到轮廓之后
这里是我的形象:
这就是我的输出,当我画我的等值线回到第一个图像:
UPDATE
我得到了它在我的工作PROGRAMM和我的输出看起来有点不同......
- (IBAction)processImage:(id)sender
{
cv::Mat forground = [[_inputView image] CVMat];
cv::Mat result = [self isolateBackground:forground];
[_outputView setImage:[NSImage imageWithCVMat:result]];
}
- (cv::Mat)isolateBackground:(cv::Mat &)_image
{
int rh = 255, rl = 100, gh = 255, gl = 0, bh = 70, bl = 0;
cv::cvtColor(_image, _image, CV_RGB2HSV_FULL);
cv::Mat element = getStructuringElement(cv::MORPH_RECT, cv::Size(5, 5));
cv::Mat bgIsolation;
cv::inRange(_image, cv::Scalar(bl, gl, rl), cv::Scalar(bh, gh, rh), bgIsolation);
bitwise_not(bgIsolation, bgIsolation);
erode(bgIsolation, bgIsolation, cv::Mat());
dilate(bgIsolation, bgIsolation, element);
return bgIsolation;
}
非常感谢!你可以看看我的代码吗? – dom 2011-12-22 09:10:12
@moosgummi你得到不同输出的原因是因为你正在转换到HSV色彩空间。我的门槛是RGB空间。您可以使用HSV,但您需要为该空间找到适当的范围。您可以将该颜色转换添加到我的示例应用程序中,然后尝试一下。我想你只需要担心色调和饱和度通道,因为值通道不包含任何颜色信息(即,值范围将保持不变[0,255])。希望有所帮助! – mevatron 2011-12-22 14:50:15
好的,所以它应该在RGB中更好地工作?bl,gl和rl是蓝色,绿色和红色值。我对吗? – dom 2011-12-22 15:18:14