📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨
📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】
📢:文章若有幸对你有帮助,可点赞 👍 收藏 ⭐不迷路🙉
📢:内容若有错误,敬请留言 📝指正!原创文,转载请注明出处
一、提取图片中的文字
1.步骤
1.读取原图
2.灰度化
3.二值化
4.膨胀
5.腐蚀
6.像素值取反
2.全部代码
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(){
Mat src, src_gray, src_bin, src_erode, kernerl, src_dilate, src_bitwise;
src = imread("D:/images/morph02.png");
if (src.empty())
{
cout << "could not load image..." << endl;
return -1;
}
imshow("原图", src);
cvtColor(src, src_gray, COLOR_BGR2GRAY);
imshow("src_gray", src_gray);
threshold(src_gray, src_bin,150,255,THRESH_BINARY);
imshow("src_bin", src_bin);
kernerl = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
dilate(src_bin, src_dilate, kernerl);
imshow("src_dilate", src_dilate);
erode(src_dilate, src_erode, kernerl);
imshow("src_erode", src_erode);
bitwise_not(src_erode, src_bitwise);
imshow("src_bitwise", src_bitwise);
waitKey(0);
return 0;
}
3.效果展示
二、提取水平与垂直线
1.转化为灰度图像
cvtColor(src,dst,color_BGR2GRAY)
2.转化为二值图像
adaptiveThreshold
3.定义结构元素
4.开操作 (腐蚀+膨胀)
5.代码演示
#include <opencv2\opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main()
{
Mat src, grayImg, binImg, dest,dest1;
//1、读取和显示图片
src = imread("D:/images/morph01.png");
if (src.empty()) {
cout << "图片打开失败!" << endl;
return -1;
}
imshow("原图像", src);
//2、转为灰度图
cvtColor(src, grayImg, COLOR_BGR2GRAY);
imshow("灰度图", grayImg);
//3、转为二值图像
adaptiveThreshold(grayImg, binImg, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2);
imshow("二值图像", binImg);
//4、构建结构元素
Mat kernel = getStructuringElement(MORPH_RECT, Size(1, 20),Point(-1,-1));
//5、开操作
erode(binImg, dest, kernel);
imshow("腐蚀后", dest);
dilate(dest, dest1, kernel);
//或是:morphologyEx(binImg, dest, MORPH_OPEN, kernel)等同于上面的先腐蚀和后膨胀;
imshow("最终结果", dest1);
waitKey(0);
}