OpenCV Python读取图像意外放大问题求助
问题:OpenCV imshow显示图像放大导致OCR识别受影响
我正在构建一个用于扫描A-level试题的OCR模型,用cv2.imread读取图像后,通过cv2.imshow显示时图像意外放大,聚焦到文字不清晰的区域,影响OCR识别。尝试用ResizeWindow函数调整窗口或直接缩小图像,结果仅裁剪已放大图像的局部并缩小,无法完整压缩图像。
原代码
import cv2 import pytesseract as pyt import easyocr #read image image = cv2.imread("test image 3.jpg") #pytesseract executable pyt.pytesseract.tesseract_cmd = "C:\Users\kobe4\OneDrive\Desktop\AI\python stuff\tesseract\tesseract.exe" #preprocessing #1.make the image gray im_gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) im_rt = cv2.rotate(im_gray,cv2.ROTATE_90_COUNTERCLOCKWISE) cv2.imshow('first image',im_rt) cv2.waitKey(0)
解决方法
1. 先按比例缩放图像再显示
直接显示大尺寸图像时,OpenCV会自动放大窗口适配图像导致局部放大。正确做法是先按比例缩小图像,再显示:
- 设定缩放比例(如缩小到原尺寸的50%)
- 计算新的宽高
- 使用
cv2.resize生成缩小后的图像,再显示
2. 强制窗口自适应(保留原图像尺寸)
如果不想修改图像本身,只想让窗口完整显示图像,可在imshow前设置窗口属性为cv2.WINDOW_NORMAL,这样窗口支持手动调整大小,默认完整展示图像。
修改后的完整代码
import cv2 import pytesseract as pyt import easyocr # 读取图像 image = cv2.imread("test image 3.jpg") # 设置pytesseract路径 pyt.pytesseract.tesseract_cmd = r"C:\Users\kobe4\OneDrive\Desktop\AI\python stuff\tesseract\tesseract.exe" # 预处理 im_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) im_rt = cv2.rotate(im_gray, cv2.ROTATE_90_COUNTERCLOCKWISE) # 方法1:缩放图像后显示 scale_percent = 50 # 缩放比例(50%) width = int(im_rt.shape[1] * scale_percent / 100) height = int(im_rt.shape[0] * scale_percent / 100) resized_img = cv2.resize(im_rt, (width, height), interpolation=cv2.INTER_AREA) cv2.imshow('Resized Image', resized_img) # 方法2:使用可调整窗口显示原尺寸图像(解开注释即可使用) # cv2.namedWindow('Original Size Image', cv2.WINDOW_NORMAL) # cv2.imshow('Original Size Image', im_rt) cv2.waitKey(0) cv2.destroyAllWindows()
内容的提问来源于stack exchange,提问作者user27415503
相关产品推荐
相关产品推荐

