資源簡介
線激光器的中心線提取,基于opencv的C++算法,基于海塞矩陣的方法
代碼片段和文件信息
#include?
#include?
#include?
#include?
using?namespace?std;
using?namespace?cv;
int?main()
{
Mat?img1?=?imread(“201.bmp“?1);//讀取背景圖像
Mat?img2?=?imread(“211.bmp“?1);//讀取線光圖像
Mat?img00;//定義相減結果
//圖像相減
addWeighted(img1?-1?img2?1?0?img00);
imshow(“背景圖像“?img1);
imshow(“線光圖像“?img2);
imshow(“圖像相減結果“?img00);
imwrite(“subresult.bmp“?img00);
Mat?img;
Mat?img0;
cvtColor(img00?img0?CV_BGR2GRAY);//顏色空間轉換函數,轉換成灰度圖像,改變mat的通道數
img?=?img0.clone();//復制圖像
//高斯濾波
img.convertTo(img?CV_32FC1);//轉換數據類型不同的mat,改變位深度,32位浮點型單通道
GaussianBlur(img?img?Size(0?0)?6?6);
//一階偏導數
Mat?m1?m2;
m1?=?(Mat_(1?2)?<1?-1);//x偏導(創造一個Mat類矩陣)一階偏導=f(x+1y)-f(xy)
m2?=?(Mat_(2?1)?<1?-1);//y偏導(創造矩陣)一階偏導=f(xy+1)-f(xy)
Mat?dx?dy;
filter2D(img?dx?CV_32FC1?m1);//卷積
filter2D(img?dy?CV_32FC1?m2);//卷積
//二階偏導數
Mat?m3?m4?m5;
m3?=?(Mat_(1?3)?<1?-2?1);//求二階x偏導的矩陣=f(x+1y)+f(x-1y)-2f(xy)
m4?=?(Mat_(3?1)?<1?-2?1);//二階y偏導的矩陣
m5?=?(Mat_(2?2)?<1?-1?-1?1);//二階xy偏導矩陣=f(x+1y+1)-f(x+1y)-f(xy+1)+f(xy)
Mat?dxx?dyy?dxy;
filter2D(img?dxx?CV_32FC1?m3);
filter2D(img?dyy?CV_32FC1?m4);
filter2D(img?dxy?CV_32FC1?m5);
//hessian矩陣
double?maxD?=?-1;
int?imgcol?=?img.cols;
int?imgrow?=?img.rows;
vector?Pt;
for?(int?i?=?0;?i {
for?(int?j?=?0;?j {
if?(img0.at(j?i)>200)
{
Mat?hessian(2?2?CV_32FC1);
hessian.at(0?0)?=?dxx.at(j?i);
hessian.at(0?1)?=?dxy.at(j?i);
hessian.at(1?0)?=?dxy.at(j?i);
hessian.at(1?1)?=?dyy.at(j?i);
Mat?eValue;
Mat?eVectors;
eigen(hessian?eValue?eVectors);
double?nx?ny;
double?fmaxD?=?0;
if?(fabs(eValue.at(0?0))?>=?fabs(eValue.at(1?0)))??//求特征值最大時對應的特征向量
{
nx?=?eVectors.at(0?0);
ny?=?eVectors.at(0?1);
fmaxD?=?eValue.at(0?0);
}
else
{
nx?=?eVectors.at(1?0);
ny?=?eVectors.at(1?1);
fmaxD?=?eValue.at(1?0);
}
double?t?=?-(nx*dx.at(j?i)?+?ny?*?dy.at(j?i))?/?(nx*nx*dxx.at(j?i)?+?2?*?nx*ny*dxy.at(j?i)?+?ny?*?ny*dyy.at(j?i));
if?(fabs(t*nx)?<=?0.5?&&?fabs(t*ny)?<=?0.5)
{
Pt.push_back(i);
Pt.push_back(j);
}
}
}
}
//在原圖上顯示提取結果?
for?(int?k?=?0;?k {
Point?rpt;
rpt.x?=?Pt[2?*?k?+?0];
rpt.y?=?Pt[2?*?k?+?1];
circle(img00?rpt?0.5?Scalar(0?0?255));
}
imshow(“result“?img00);
imwrite(“提取結果.bmp“?img00);
waitKey(0);
return?0;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-05-15?19:32??steger\
?????目錄???????????0??2018-04-14?11:05??steger\.vs\
?????目錄???????????0??2018-04-14?11:05??steger\.vs\steger\
?????目錄???????????0??2018-05-15?19:32??steger\.vs\steger\v15\
?????文件???????23552??2018-05-15?19:34??steger\.vs\steger\v15\.suo
?????文件????17969152??2018-05-15?19:34??steger\.vs\steger\v15\Browse.VC.db
?????目錄???????????0??2018-04-14?11:06??steger\.vs\steger\v15\ipch\
?????目錄???????????0??2018-04-18?14:49??steger\.vs\steger\v15\ipch\AutoPCH\
?????目錄???????????0??2018-04-14?11:07??steger\.vs\steger\v15\ipch\AutoPCH\4e4ec8f80edc9eb7\
?????文件????61472768??2018-05-15?19:32??steger\.vs\steger\v15\ipch\AutoPCH\4e4ec8f80edc9eb7\源.ipch
?????目錄???????????0??2018-05-15?19:33??steger\steger\
?????文件????????1432??2018-04-14?11:05??steger\steger.sln
?????文件???????24493??2018-04-18?14:44??steger\steger\1.png
?????文件?????1311798??2017-10-19?16:45??steger\steger\201.bmp
?????文件?????1311798??2017-10-19?16:45??steger\steger\211.bmp
?????文件?????5242934??2018-04-26?15:08??steger\steger\222.bmp
?????文件?????5242934??2018-04-26?15:08??steger\steger\444.bmp
?????文件????????5943??2018-04-14?13:04??steger\steger\steger.vcxproj
?????文件?????????948??2018-04-14?13:04??steger\steger\steger.vcxproj.filters
?????文件?????????165??2018-04-14?11:05??steger\steger\steger.vcxproj.user
?????文件?????3932214??2018-05-15?19:33??steger\steger\subresult.bmp
?????目錄???????????0??2018-04-14?13:04??steger\steger\x64\
?????目錄???????????0??2018-05-15?19:33??steger\steger\x64\Debug\
?????文件????????1564??2018-05-15?19:33??steger\steger\x64\Debug\steger.log
?????目錄???????????0??2018-05-15?19:33??steger\steger\x64\Debug\steger.tlog\
?????文件?????????568??2018-05-15?19:33??steger\steger\x64\Debug\steger.tlog\CL.command.1.tlog
?????文件???????26634??2018-05-15?19:33??steger\steger\x64\Debug\steger.tlog\CL.read.1.tlog
?????文件?????????392??2018-05-15?19:33??steger\steger\x64\Debug\steger.tlog\CL.write.1.tlog
?????文件????????1104??2018-05-15?19:33??steger\steger\x64\Debug\steger.tlog\li
?????文件????????3796??2018-05-15?19:33??steger\steger\x64\Debug\steger.tlog\li
?????文件?????????384??2018-05-15?19:33??steger\steger\x64\Debug\steger.tlog\li
............此處省略12個文件信息
- 上一篇:c++編寫的串口通訊程序
- 下一篇:北郵高級計算機體系結構記分牌程序和源碼
評論
共有 條評論