资源简介
线激光器的中心线提取,基于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++编写的串口通讯程序
- 下一篇:北邮高级计算机体系结构记分牌程序和源码
相关资源
- 人脸识别(opencv_facedetect_v4l2)
- 基于opencv的模板匹配代码
- opencv图片扫描以及校正
- opencv手部轮廓识别以及轨迹识别
- opencv2 3D标定.cpp
- 基于opencv漫水填充算法综合
- OpenCV Computer Vision Application Programming
- 基于图割的图像分割OpenCV+MFC实现
- 识别魔方颜色
- opencv版俄罗斯方块源码
- VS2013 / MFC + OpenCV 2.4.9实现视频的播放
- 粒子滤波器+目标跟踪的C++实现,VS2
- 张平OpenCV算法精讲基于python和C++教材
- 虹膜识别开源代码OSIRIS4.1基于opencv
- Sift特征点提取与匹配opencv库
- YCbCr、混合高斯以及YCbCg肤色检测模型
- 光流法代码
- OpenCV打开摄像机显示在MFC窗口工程源
- 使用c++读取图像到二维矩阵
- 三维点云的圆柱面拟合
- MFC+OPENCV摄像机标定程序
- 基于特征脸的人脸识别MFC+OpenCV
- opencv图像处理MFC
- OPENCV人脸检测加角点检测并输出坐标
- FillHole.rar
- 道路提取算法 c++ opencv
- PCA代码实现详解
- opencv卡尔曼滤波
- SeamCarving opencv c++
- opencv prewitt边缘检测
评论
共有 条评论