资源简介
代码中利用canny边缘检测绘制并取得工程目录图片下的轮廓,对每个轮廓用直线进行拟合,计算每个轮廓中点到拟合直线的距离。以此来判断一个轮廓的线性程度。包括了霍夫变换检测图像中的直线和累计概率霍夫变换检测图像中的直线
代码片段和文件信息
//头文件
#include “opencv2/opencv.hpp“
#include
#include
#include
#include “line_fit.h“
using namespace cv;
using namespace std;
//宏定义
#define random(x) ((rand())%x)
//全局变量
//函数声明
int main()
{
/*载入原图片*/
//Mat src = imread(“E://pic_F.L//Picture//OK1.jpg“ 1);//原始图片
Mat src = imread(“OK1.jpg“);
Mat gray;//原始的灰度图
cvtColor(srcgrayCOLOR_RGB2GRAY);
/*图片预处理*/
//平滑滤波使图像的背景尽量统一
Mat _gray;
bilateralFilter(gray_gray55*25/2); //图像滤波
imshow(“平滑处理的图像“_gray);
//图像增强,突出边缘
Mat ruihua;
Mat kernel = (Mat_(33) << 0 -1 0
-1 5 -1
0 -1 0); //定义增强图像的卷积核
filter2D(_grayruihuagray.depth()kernel); //先滤波,再增强。高通滤波器锐化边缘
imshow(“增强后的图像“ruihua);
/*边缘检测*/
Mat canny_output;//边缘检测的输出图像
Canny(ruihua canny_output 60 150 3);
imshow(“canny边缘检测的输出图“ canny_output);
/*利用标准霍夫变换检测途中的直线*/
////检测线段
//vector lines;//存放检测到的直线
//Mat H_result;
//cvtColor(gray H_result CV_GRAY2BGR);
//HoughLines(canny_output lines 1 CV_PI/180 150 0 0);
//画出线段
//for(size_t i=0; i //{
// float rho = lines[i][0] theta = lines[i][i];
// Point pt1pt2;
// double a =cos(theta) b=sin(theta);
// double x0=a*rhoy0 = b*rho;
// pt1.x=cvRound(x0 + 1000*(-b));
// pt1.y=cvRound(x0 + 1000*(a));
// pt2.x=cvRound(x0 - 1000*(-b));
// pt2.y=cvRound(x0 - 1000*(a));
// line(H_result pt1 pt2 Scalar(255) 1 LINE_AA);
//}
//imshow(“直线检测的结果“ H_result);
/*利用累计概率霍夫变换检测直线*/
////检测线段
//vector lines;
//HoughLinesP(canny_output lines 1 CV_PI/180 80 50 10);
//Mat HP_result;
//cvtColor(gray HP_result CV_GRAY2BGR);
////画出线段
//for(size_t i=0; i //{
// Vec4i l = lines[i];
// line(HP_result Point(l[0] l[1]) Point(l[2]l[3]) Scalar(255)1 LINE_AA);
//}
//imshow(“直线检测结果“ HP_result);
/*fitline()拟合直线*/
//获取轮廓,得到一系列的输入点集
vector> cal_contour;//存放轮廓
vector contours;
vector hierarchy;
findContours(canny_output contours hierarchy RETR_TREE CHAIN_APPROX_NONE);
findContours(canny_output cal_contour hierarchy RETR_TREE CHAIN_APPROX_NONE);
cv::Mat image = cv::Mat::zeros(gray.size()CV_8UC3);
vector lines(contours.size());
double dis_total=0.0;
for(size_t i=0; i {
{
fitLine(contours[i] lines[i] DIST_L2 0 1e-2 1e-2);//拟合直线
//画线
//获取点斜式的点和斜率
cv::Point point0;
point0.x = lines[i][2];
point0.y = lines[i][3];
double k = lines[i][1] / lines[i][0];
//计算直线的端点(y = k(x - x0) + y0)
cv::Point point1 point2;
point1.x = 0;
point1.y = k * (0 - point0.x) + point0.y;
point2.x = 640;
point2.y = k * (640 - point0.x) + point0.y;
/*计算线性度指标*/
double dis = 0.0;
if(contours[i].size > 0)
{
for(int k=0; k {
for(int l=0; l
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-08-20 21:06 line\
目录 0 2018-08-21 15:38 line\line\
目录 0 2018-08-20 21:22 line\line\Debug\
目录 0 2018-08-21 15:03 line\line\ipch\
目录 0 2018-08-21 15:03 line\line\ipch\line-370f6cc7\
文件 65601536 2018-08-21 15:03 line\line\ipch\line-370f6cc7\line-a622a532.ipch
目录 0 2018-08-21 15:36 line\line\line\
文件 17125376 2018-08-21 15:38 line\line\line.sdf
文件 1233 2018-08-20 21:22 line\line\line.sln
文件 15360 2018-08-21 15:38 line\line\line.suo
目录 0 2018-08-20 21:22 line\line\line\Debug\
文件 528 2018-08-20 21:22 line\line\line\Debug\cl.command.1.tlog
文件 25720 2018-08-20 21:22 line\line\line\Debug\CL.read.1.tlog
文件 288 2018-08-20 21:22 line\line\line\Debug\CL.write.1.tlog
文件 55 2018-08-20 21:22 line\line\line\Debug\line.lastbuildstate
文件 1726 2018-08-20 21:22 line\line\line\Debug\line.log
文件 391948 2018-08-20 21:22 line\line\line\Debug\line.obj
文件 0 2018-08-20 21:22 line\line\line\Debug\line.unsuccessfulbuild
文件 713 2018-08-20 21:22 line\line\line\Debug\line.vcxprojResolveAssemblyReference.cache
文件 0 2018-08-20 21:22 line\line\line\Debug\line.write.1.tlog
文件 2 2018-08-20 21:22 line\line\line\Debug\li
文件 2 2018-08-20 21:22 line\line\line\Debug\li
文件 2 2018-08-20 21:22 line\line\line\Debug\li
文件 781312 2018-08-20 21:22 line\line\line\Debug\vc100.idb
文件 1314816 2018-08-20 21:22 line\line\line\Debug\vc100.pdb
文件 3901 2018-08-21 15:37 line\line\line\line.cpp
文件 6736 2018-08-21 08:35 line\line\line\line.vcxproj
文件 1155 2018-08-21 08:35 line\line\line\line.vcxproj.filters
文件 143 2018-08-20 21:06 line\line\line\line.vcxproj.user
文件 3966 2018-08-21 11:14 line\line\line\line_fit.cpp
文件 364 2018-08-21 10:49 line\line\line\line_fit.h
............此处省略26个文件信息
相关资源
- opencv需要的常用dllcv100、cv200.dll、ml
- opencv彩色三通道图片反色
- 车牌识别opencv
- OpenCV教程--基础篇
- 人脸识别+opencv
- win7 32位 vs2010 opencv3.00版本 opencv_worl
- opencv3.4.1的lib库
- Qt_opencv.rar
- 图像轮廓拐点信息读取程序
- OpenCV2之Qt库
- 用opencv实现全景图拼接
- 计算机视觉SIFT算子OPENCV3.0详细实现未
- opencv混合高斯算法
- opencv汽车分类训练正负样本
- 基于机器视觉的列车前方障碍物检测
- 人脸识别,完整代码和素材
- vs2010编译的32位opencv+opencv_contrib3.4.1
- OpenCV-2.4.1&tbb;(x86)解压即用.zip
- 学习OpenCV(中文版高清PDF).zip
- opencv2.4.13 x64版
- opencv tbb
- OpenCV-2.0.0.tar.bz2
- Kinect2+opencv获取深度图
- VC OpenCV车牌识别
- CMake+opencv3.4编译时 Download: opencv_ffmp
- 毕业设计基于Opencv的车牌识别系统
- OpenCV3计算机视觉
- OpenCV4.2.0已编译好的32位库
- 张正友相机标定Opencv实现
- Qt_Opencv_Camera.rar
评论
共有 条评论