代码拉取完成,页面将自动刷新
import cv2 as cv # 导入OpenCV库
import numpy as np # 导入numpy库
import matplotlib.pyplot as plt # 导入matplotlib的pyplot库
import os # 导入os库
# 确保文件路径正确
image_path = 'hanzi1.jpg' # 去掉了错误的引号
# 读取图片,0表示灰度图像
img = cv.imread(image_path, 0)
if img is None:
print(f"Error: 无法加载图像 {image_path}")
else:
plt.subplot(1, 7, 1)
plt.imshow(img, cmap='gray')
plt.axis('off')
#全局阈值处理
blur = cv.GaussianBlur(img, (5, 5), 0) # 阈值处理的效果受噪声影响较大,常需要先进行滤波等预处理
_, th = cv.threshold(blur, 0, 255, cv.THRESH_BINARY + cv.THRESH_OTSU)
th1_inv = 255 -th
plt.subplot(1,7,2)
plt.imshow(th1_inv,cmap='gray')
plt.axis('off')
#腐蚀
kernel1 = np.ones((3,3), np.uint8)
eroded_img = cv.erode(th1_inv, kernel1, iterations=4)
plt.subplot(1,7,3)
plt.imshow(eroded_img,cmap='gray')
plt.axis('off')
#膨胀
kernel2 = cv.getStructuringElement(cv.MORPH_CROSS, (4, 4)).astype(np.uint8)
dilated_img = cv.dilate(eroded_img, kernel2,iterations=8)
plt.subplot(1,7,4)
plt.imshow(dilated_img,cmap='gray')
plt.axis('off')
#闭运算
kernel3 = np.ones((5, 5), np.uint8)
closed_img = cv.morphologyEx(dilated_img, cv.MORPH_CLOSE, kernel3,iterations=25)
plt.subplot(1,7,5)
plt.imshow(closed_img,cmap='gray')
plt.axis('off')
#边缘检测
img_blur = cv.GaussianBlur(closed_img,(3,3), 0) #高斯滤波
canny = cv.Canny(img_blur, 100, 200) #Canny边缘检测
contours, hierarchy = cv.findContours(canny, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE) # 查找轮廓
cv.drawContours(canny, contours, -1, (255), 2) # 画边界框
plt.subplot(1,7,6)
plt.imshow(canny,cmap='gray')
plt.axis('off')
#轮廓检测
img_copy = th.copy()# 复制图像以绘制边界框
valid_contours_indices = []# 创建一个列表来存储通过周长筛选的轮廓索引
for i, c in enumerate(contours):
perimeter = cv.arcLength(c, True)
print("轮廓周长:", perimeter)
x, y, w, h = cv.boundingRect(c)
# 根据周长阈值筛选并绘制边界框
if perimeter > 350 and perimeter < 600:
cv.rectangle(img_copy, (x, y), (x + w, y + h), (0, 255, 0), 2)
valid_contours_indices.append(i)# 将符合条件的轮廓索引添加到列表中
chars_folder = 'chars'
if not os.path.exists(chars_folder):
os.makedirs(chars_folder)
for i in valid_contours_indices:
# 获取当前轮廓的边界框坐标
x, y, w, h = cv.boundingRect(contours[i])
# 切割图像
roi = th[y:y+h+15, x:x+w+15]
# 创建文件保存路径
filename = os.path.join(chars_folder, f'{i}.jpg')
# 保存图像
cv.imwrite(filename, roi)
plt.subplot(1,7,7)
plt.imshow(img_copy,cmap='gray')
plt.axis('off')
plt.show()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。