作为某种“假日项目”,我正在玩 OpenCV 并想要检测和测量东西。
当前工作流程(早期 - 检测):
- 转换为灰度(cv::cvtColor)
- 应用自适应阈值 (cv::adaptiveThreshold)
- 应用精明边缘检测 (cv::Canny)
- 寻找轮廓 (cv::findContours)
我的结果有点糟糕,我不确定正确的方向是什么。我已经让 cvBlob 在我当前的设置(OSX 10.7.2,Xcode 4.2.1)下工作,这是一个更好的方法吗?如果是这样,我怎样才能以正确的方式实施它?
还是我需要先进行背景减法?我试过了,但后来找不到轮廓
这是我的图像:
这就是我的输出,当我将轮廓画回第一张图像时:
更新
我让它在我的程序中工作,我的输出看起来有点不同......</p>
- (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;
}