使用OpenCV执行模板匹配时如何放大显示输出图像
模板匹配输出图像过小的解决方案
你当前代码中plt.show(1900,2000)为错误用法,plt.show()不接收尺寸参数,显示尺寸需要提前通过画布或窗口配置调整。
方案1:调整matplotlib显示尺寸
- 提前设置画布尺寸,单位为英寸,配合默认100dpi可直接换算为像素尺寸,比如要输出1900*2000像素的显示效果,设置
plt.figure(figsize=(19, 20), dpi=100)即可 - OpenCV默认读取图像为BGR通道,matplotlib渲染使用RGB通道,直接显示会出现颜色偏移,需要先做通道转换
- plt.show()无需传入参数,直接调用即可
方案2:调整OpenCV imshow窗口尺寸
- 默认OpenCV窗口为自适应尺寸不可调整,需要先创建可缩放窗口:
cv2.namedWindow("Matched image", cv2.WINDOW_NORMAL) - 可通过resizeWindow固定窗口显示尺寸:
cv2.resizeWindow("Matched image", 1900, 2000) - 需补充
cv2.waitKey(0)和cv2.destroyAllWindows()防止窗口无响应或闪退
修改后的完整代码
import cv2 import numpy as np from matplotlib import pyplot as plt %matplotlib inline img_rgb = cv2.imread('ddd/radiobutton.png') img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY) template = cv2.imread('ddd/temp.png', 0) height, width = template.shape[::] res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED) # 显示匹配结果图,提前设置画布大小 plt.figure(figsize=(19, 20), dpi=100) plt.imshow(res, cmap='gray') plt.show() min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res) top_left = min_loc bottom_right = (top_left[0]+ width, top_left[1]+height) cv2.rectangle(img_rgb, top_left, bottom_right, (255, 0, 0), 10) # --- 方案1:matplotlib显示带框图像(二选一即可) --- # 转通道避免偏色 img_rgb_rgb = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2RGB) plt.figure(figsize=(19, 20), dpi=100) plt.imshow(img_rgb_rgb) plt.show() # --- 方案2:OpenCV显示带框图像(二选一即可) --- # cv2.namedWindow("Matched image", cv2.WINDOW_NORMAL) # cv2.resizeWindow("Matched image", 1900, 2000) # cv2.imshow("Matched image", img_rgb) # cv2.waitKey(0) # cv2.destroyAllWindows()
内容的提问来源于stack exchange,提问作者EverydayDeveloper
相关产品推荐
相关产品推荐

