opencv3用椭圆拟合二维点集在图像中的应用-滚动条
2015-10-20 00:17
591 查看
#include<opencv2/opencv.hpp> #include<iostream> #include<vector> using namespace cv; using namespace std; int g_nMinThred = 128, g_nMaxThred = 255; int g_nThick = 0; int main() { Mat srcImage = imread("1.jpg"); namedWindow("【原图】", 0); imshow("【原图】", srcImage); createTrackbar("minthred", "【原图】", &g_nMinThred, 255, 0); createTrackbar("maxthred", "【原图】", &g_nMaxThred, 255, 0); createTrackbar("thick", "【原图】", &g_nThick, 100, 0); //先对图像进行空间的转换(为了之后要提取二值图像) Mat grayImage; cvtColor(srcImage, grayImage, CV_BGR2GRAY); //对图像进行滤波,达到较好的效果 GaussianBlur(grayImage, grayImage, Size(3, 3), 0, 0); imshow("【滤波后的图像】", grayImage); char key; while (1) { //用边缘检测的方式获取二值图像 Mat cannyImage; Canny(grayImage, cannyImage, g_nMinThred, g_nMaxThred, 3); //在二值图像中提取轮廓 vector<vector<Point>> contours; vector<Vec4i> hierarchy; findContours(cannyImage, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0)); if (contours.size() == 0) continue; //对每个轮廓的点集 找逼近多边形 vector<vector<Point>> approxPoint(contours.size()); Mat drawImage = Mat::zeros(srcImage.size(), CV_8UC3); //在画椭圆时,不知道为什么容易出错,小弟不是很明白,求大神讲解!!!!!!!!! for (int i = 0; i < /*(int)contours.size()*/6; i++) { //在生成的那些随机点中寻找拟合的椭圆 RotatedRect ellipsemege = fitEllipse(contours[i]); //根据得到的椭圆的信息 绘制椭圆 ellipse(drawImage, ellipsemege, Scalar(0, 0, 255), g_nThick + 1); } imshow("【绘制后的图像】", drawImage); key = waitKey(1); if (key == 27) break; } return 0; }
相关文章推荐
- opencv3用椭圆拟合二维点集-fitEllipse函数
- opencv3寻找最小包围圆形在图像中的应用-滚动条
- 01_基于应用拆分的技术架构
- 01_基于应用拆分的技术架构
- opencv3寻找最小包围圆形-minEnclosingCircle函数
- opencv3寻找最小包围矩形在图像中的应用-滚动条
- opencv3寻找最小包围矩形-minAreaRect函数
- 【Linux命令】文件和目录操作命令
- opencv3实现分水岭算法-watershed函数
- opencv3矩的计算-在图像中的应用-滚动条
- opencv3矩的计算-在图像中的应用
- Linux之split命令详解
- 表单提交错误后返回内容消失问题的解决方法(PHP网站)
- CXF+Spring+Tomcat简明示例
- AOP的半自动代理 及 缺点
- Linux常见的挂载目录说明
- Linux中mysql忘记密码,或者登录不上,等等,都可使用以下方式
- Linux安装软件
- svnserve.conf: Option expected的问题解决方法
- nginx整合tomcat实现域名泛解析