推荐博主——点击这里
实现代码
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main()
{
Mat srcimage=imread("C:/Users/xihua/Pictures/Saved Pictures/opencv操作图/水平与垂直.png");
if(!srcimage.data) {
cout<<"No image!"<<endl; return -1;
}
namedWindow("原图");
imshow("原图",srcimage);
//转化为灰度图像
Mat grayimage;
cvtColor(srcimage,grayimage,COLOR_BGR2GRAY);
//转为二值化图像
Mat image;
//void adaptiveThreshold( InputArray src, OutputArray dst,double maxValue, int adaptiveMethod,int thresholdType, int blockSize, double C );
adaptiveThreshold(grayimage,image,255,ADAPTIVE_THRESH_MEAN_C,THRESH_BINARY,15,-2);
//定义垂直和水平结构体
Mat lelement=getStructuringElement(MORPH_RECT,Size(1,srcimage.rows/16),Point(-1,-1));
Mat helement=getStructuringElement(MORPH_RECT,Size(srcimage.cols/16,1),Point(-1,-1));
//开操作
/*
Mat temp,dst;
erode(image,temp,hline);//对垂直线进行腐蚀
dilate(temp,dst,hline);//再膨胀,对水平线被腐蚀部分进行还原,最后提取到水平线
bitwise_not(dst,dst);//反向取像素
namedWindow("提取水平线");
imshow("提取水平线",dst)
*/
Mat finalimage;
morphologyEx(image,finalimage,MORPH_OPEN,helement);
namedWindow("提取水平线");
imshow("提取水平线",finalimage);
waitKey(0);
return 0;
}
本文详细介绍了使用OpenCV库进行图像处理的过程,包括读取图片、灰度转换、二值化处理、形态学运算等步骤,特别聚焦于通过自适应阈值和形态学开操作来提取图像中的水平线。
9万+

被折叠的 条评论
为什么被折叠?



