Python中未导入图像画线方法及OpenCV imshow报错解决方案
嘿,我来帮你搞定这两个问题:
问题1:如何在Python中给未导入的图像绘制直线?
其实完全不需要导入外部图像就能绘图——你可以直接创建一张空白画布(也就是像素矩阵)来操作。具体步骤很直观:
- 用
numpy.zeros()创建指定尺寸、通道数的空白图像,比如你代码里的np.zeros((512,512,3),np.uint8),就是生成了一张512×512的3通道彩色空白图(初始全黑) - 调用
cv.line()在这张空白图上绘制直线 - 最后用
cv.imshow()展示结果
你的代码其实已经在这么做了,只是后面遇到了报错小问题~
问题2:修复
imshow的报错问题 你碰到的error: (-215) size.width>0 && size.height>0报错,核心原因是cv.imshow()接收到的图像是无效的(空值或者尺寸不对)。结合你说“画线前可正常显示”的情况,问题肯定出在cv.line()的赋值操作上。
看你这段代码:
img=cv.line(img,(0,0),(300,300),(0,0,255),4)
这里的坑在于:OpenCV的cv.line()是直接在传入的图像上做修改的,它的返回值其实是None。你把这个None赋值回img,等于把原本好好的空白图像给覆盖成空值了,cv.imshow()自然就报错了。
修复方法超简单,去掉赋值就行:
# 直接调用函数修改原图像,不用把返回值赋值给img cv.line(img,(0,0),(300,300),(0,0,255),4)
修复后的完整代码如下:
import numpy as np import cv2 as cv # 创建512×512的3通道彩色空白图 img = np.zeros((512,512,3), np.uint8) # 在空白图上绘制从(0,0)到(300,300)的红色直线,线宽4 cv.line(img, (0,0), (300,300), (0,0,255), 4) # 展示图像 cv.imshow('draw', img) cv.waitKey(0) # 释放窗口资源,避免程序结束后窗口残留 cv.destroyAllWindows()
内容的提问来源于stack exchange,提问作者Bashar Heeb
相关产品推荐
相关产品推荐

