【发布时间】:2013-05-23 16:16:36
【问题描述】:
我正在使用 OpenCV 帮助我检测从 iPhone 相机拍摄的图像中的硬币。我使用 HoughCircles 方法帮助我找到它们,但结果不太理想。
cv::Mat greyMat;
cv::Mat filteredMat;
cv::vector<cv::Vec3f> circles;
cv::cvtColor(mainImageCV, greyMat, CV_BGR2GRAY);
cv::threshold(greyMat, filteredMat, 100, 255, CV_THRESH_BINARY);
for ( int i = 1; i < 31; i = i + 2 )
{
// cv::blur( filteredMat, greyMat, cv::Size( i, i ), cv::Point(-1,-1) );
cv::GaussianBlur(filteredMat, greyMat, cv::Size(i,i), 0);
// cv::medianBlur(filteredMat, greyMat, i);
// cv::bilateralFilter(filteredMat, greyMat, i, i*2, i/2);
}
cv::HoughCircles(greyMat, circles, CV_HOUGH_GRADIENT, 1, 50);
NSLog(@"Circles: %ld", circles.size());
for(size_t i = 0; i < circles.size(); i++)
{
cv::Point center((cvRound(circles[i][0]), cvRound(circles[i][1])));
int radius = cvRound(circles[i][2]);
cv::circle(greyMat, center, 3, cv::Scalar(0,255,0));
cv::circle(greyMat, center, radius, cv::Scalar(0,0,255));
}
[self removeOverViews];
[self.imageView setImage: [self UIImageFromCVMat:greyMat]];
当前的代码段返回我有 15 个圆圈,并且所有位置都在图像的右侧,这让我感到困惑。
我是 OpenCV 的新手,几乎没有任何 iOS 示例让我绝望。
任何帮助将不胜感激,在此先感谢!
【问题讨论】:
-
我对霍夫圆所做的少量工作是霍夫圆在二值图像上效果最好,即具有白色像素的图像显示要制作圆的边缘点,并且把其他一切都涂黑。在您的图像中,您没有传递二进制图像。每个像素都作为边缘点,因此可以在任何地方制作一个圆圈。
-
重点是需要去除图像中的噪点。尝试模糊它。
-
好的,但是我应该使用哪种类型的模糊?归一化盒滤波器、高斯滤波器、中值滤波器还是双边滤波器?哪个对我想做的事情最有效?
-
我应该在将其变灰之前消除噪音吗?还是之后?
标签: iphone ios opencv image-processing uiimage