OpenCV官方文档学习记录(18)
2014-12-16 12:57
351 查看
霍夫圆变换:
检测结果:
可见左侧的盘子没有被检出,但是却不知道是怎么回事,可能左侧不是正圆
分割检测的结果:
右侧:
左侧:
,因为用肉眼无法分辨,所以上述结果不好确定。
补充一下,当程序如下:
就是圆变换的dp改成2的时候可以识别出左侧盘子的轮廓:
同时应用到整幅图上,会发现:
此时circles:
以上。
#include <opencv2\opencv.hpp> #include <iostream> #include <string> #include <vector> #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) using namespace std; using namespace cv; void showImg(const string &win_name, const Mat &img) { namedWindow(win_name, CV_WINDOW_AUTOSIZE); imshow(win_name, img); } int main(void) { Mat src = imread("panzi.jpg"); if (src.empty()) return -1; Mat dst; cvtColor(src, dst, CV_BGR2GRAY); showImg("dst", dst); GaussianBlur(dst, dst, Size(9, 9), 2, 2); vector<Vec3f> circles; HoughCircles(dst, circles, CV_HOUGH_GRADIENT, 1, dst.rows / 8, 200, 100, 0, 0); for (size_t i = 0; i < circles.size(); ++i) { Point center(cvRound(circles[i][0]), cvRound(circles[i][1])); int radius = cvRound(circles[i][2]); circle(src, center, 3, Scalar(0, 255, 0), -1, 8, 0);//绘制圆心 circle(src, center, radius, Scalar(0, 0, 255), 3, 8, 0);//绘制圆 } showImg("after ciecle decete", src); waitKey(); return 0; }
检测结果:
可见左侧的盘子没有被检出,但是却不知道是怎么回事,可能左侧不是正圆
分割检测的结果:
右侧:
左侧:
,因为用肉眼无法分辨,所以上述结果不好确定。
补充一下,当程序如下:
#include <opencv2\opencv.hpp> #include <iostream> #include <string> #include <vector> #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) using namespace std; using namespace cv; void showImg(const string &win_name, const Mat &img) { namedWindow(win_name, CV_WINDOW_AUTOSIZE); imshow(win_name, img); } int main(void) { Mat src = imread("split2.jpg"); if (src.empty()) return -1; Mat dst; cvtColor(src, dst, CV_BGR2GRAY); GaussianBlur(dst, dst, Size(3, 3), 2, 2); showImg("dst", dst); vector<Vec3f> circles; HoughCircles(dst, circles, CV_HOUGH_GRADIENT, 2, dst.rows / 8, 100, 100, 0, 0); for (size_t i = 0; i < circles.size(); ++i) { Point center(cvRound(circles[i][0]), cvRound(circles[i][1])); int radius = cvRound(circles[i][2]); circle(src, center, 3, Scalar(0, 255, 0), -1, 8, 0);//绘制圆心 circle(src, center, radius, Scalar(0, 0, 255), 3, 8, 0);//绘制圆 } showImg("after ciecle decete", src); waitKey(); return 0; }
就是圆变换的dp改成2的时候可以识别出左侧盘子的轮廓:
同时应用到整幅图上,会发现:
此时circles:
以上。
相关文章推荐
- OpenCV官方文档学习记录(1)
- OpenCV官方文档学习记录(6)
- OpenCV官方文档学习记录(19)
- OpenCV官方文档学习记录(2)
- OpenCV官方文档学习记录(14)
- OpenCV官方文档学习记录(20)
- OpenCV官方文档学习记录(16)
- OpenCV官方文档学习记录(4)
- OpenCV官方文档学习记录(12)
- OpenCV官方文档学习记录(8)
- OpenCV官方文档学习记录(5)
- OpenCV官方文档学习记录(10)
- OpenCV官方文档学习记录(11)
- OpenCV官方文档学习记录(17)
- OpenCV官方文档学习记录(15)
- OpenCV官方文档学习记录(9)
- OpenCV官方文档学习记录(7)
- OpenCV官方文档学习记录(3)
- OpenCV官方文档学习记录(13)
- OpenCV基础入门 基于官方文档解读(4)--core模块学习