資源簡介
代碼中利用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個文件信息
評論
共有 條評論