各位用户为了找寻关于Python OpenCV去除字母后面的杂线操作的资料费劲了很多周折。这里教程网为您整理了关于Python OpenCV去除字母后面的杂线操作的相关资料,仅供查阅,以下为您介绍关于Python OpenCV去除字母后面的杂线操作的详细内容
原图
代码
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27src
=
cv2.imread(
"28.png"
)
gray_src
=
cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
#cv2.imshow("input image", src)
#cv2.imshow("gray image", gray_src)
#cv2.waitKey(0)
gray_src
=
cv2.bitwise_not(gray_src)
#二值化
binary_src
=
cv2.adaptiveThreshold(gray_src,
255
, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY,
15
,
-
2
)
cv2.namedWindow(
"result image"
, cv2.WINDOW_AUTOSIZE)
cv2.imshow(
"result image"
, binary_src)
#cv2.waitKey(0)
# 提取水平线 src.shape[1]得到src列数
#hline = cv2.getStructuringElement(cv2.MORPH_RECT, (1, 1), (-1, -1))
hline
=
cv2.getStructuringElement(cv2.MORPH_RECT, (
1
,
4
), (
-
1
,
-
1
))
#定义结构元素,卷积核
# 提取垂直线 src.shape[0]得到src行数
vline
=
cv2.getStructuringElement(cv2.MORPH_RECT, (
4
,
1
), (
-
1
,
-
1
))
#vline = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
# 这两步就是形态学的开操作——先腐蚀再膨胀
#temp = cv2.erode(binary_src, hline) #腐蚀
#dst = cv2.dilate(temp, hline) #膨胀
# 开运算
dst
=
cv2.morphologyEx(binary_src, cv2.MORPH_OPEN, hline)
#水平方向
dst
=
cv2.morphologyEx(dst, cv2.MORPH_OPEN, vline)
#垂直方向
#将二指图片的效果反转既黑色变白色,白色变黑色。 非操作
dst
=
cv2.bitwise_not(dst)
cv2.imshow(
"Final image"
, dst)
cv2.waitKey(
0
)
结果图,还有一些点需要进一步处理
补充知识:Opencv 提取水平 垂直线,去除杂线,提取对象
我就废话不多说了,大家还是直接看代码吧~
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37#include<opencv2opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int
main(
int
argc, char
*
argv[])
{
Mat src
=
imread(
"截图3.jpg"
);
if
(src.empty())
{
return
-
1
;
}
String strInput
=
"input image"
;
namedWindow(strInput, CV_WINDOW_AUTOSIZE);
imshow(strInput, src);
Mat dst;
cvtColor(src, dst, CV_BGR2GRAY);
/
/
转灰度
imshow(
"output grap image"
, dst);
Mat binimg;
adaptiveThreshold(~dst, binimg,
255
, ADAPTIVE_THRESH_MEAN_C, ADAPTIVE_THRESH_MEAN_C,
15
,
-
2
);
/
/
转二值
imshow(
"binary image"
, binimg);
Mat hLine
=
getStructuringElement(MORPH_RECT, Size(src.cols
/
16
,
1
), Point(
-
1
,
-
1
));
/
/
水平结构
Mat vLine
=
getStructuringElement(MORPH_RECT, Size(
1
, src.rows
/
16
), Point(
-
1
,
-
1
));
/
/
垂直结构
Mat kernel
=
getStructuringElement(MORPH_RECT, Size(
3
,
3
), Point(
-
1
,
-
1
));
/
/
去除杂线 提取对象
Mat tmp;
/
/
erode(binimg, tmp, vLine);
/
/
dilate(tmp, dst, vLine);
morphologyEx(binimg, dst, CV_MOP_OPEN,hLine);
bitwise_not(dst, dst);
/
/
取反
blur(dst, dst, Size(
3
,
3
), Point(
-
1
,
-
1
));
imshow(
"Final image"
, dst);
waitKey(
0
);
return
0
;
}
以上这篇Python OpenCV去除字母后面的杂线操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/sxlsxl119/article/details/80223729