3.3日代码修正之 error: (-215:Assertion failed) size.width>0 && size.height>0 in function ‘cv::imshow‘

本文通过实例演示了使用OpenCV进行圆形检测的过程,包括解决路径问题、BGR到灰度图及HSV转换的方法,以及调整参数以提高检测精度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 问题一

首先我还没明白绝对路径和相对路径的区别,但是在调程序的过程中出现

  • 问题二

BGR–>灰度图,BGR–>HSV转化还不懂

  1. 在检测圆过程中运行失败改正后运行成功的一个插曲
cv2.error: OpenCV(4.5.1) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-oduouqig\opencv\modules\highgui\src\window.cpp:376: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'

这类错误,根据教程把图片从E盘转到F盘并放在和代码同一个文件夹下,并把路径变成相对路径,程序正常运行

总结

在检测圆形以及显示圆形方面霍夫圆检测存在的问题:并不能准确的把图中每一个圆检测出来,param1和param2只能在一定范围内修改,超过一定范围效果并不好,两个让我醍醐灌顶的语法:

circles= cv2.HoughCircles(gray,cv2.HOUGH_GRADIENT,1,100,param1=100,param2=180,minRadius=5,maxRadius=300)#灰度图,方法,dp=1,累加器和图像具有相同的分辨率,两个圆心具有的最小距离
img=cv2.circle(img,(x,y),r,(0,0,255),2)#输入的图片,圆心坐标,半径,颜色,如果是负数就是实心圆,整数就是绘制圆的轮廓大小

附上整个检测圆的代码:

import  cv2

#载入并显示图片
img=cv2.imread('rmb.png   ')
cv2.imshow('img',img)#第一个参数是要显示的图像的窗口名字,第二个参数是要显示的图像
#灰度化
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#BGR-->灰度图//还有BGR-->HSV
#输出图像大小,方便根据图像大小调节minRadius和maxRadius

print(img.shape)
#霍夫变换圆检测

circles= cv2.HoughCircles(gray,cv2.HOUGH_GRADIENT,1,100,param1=100,param2=180,minRadius=5,maxRadius=300)#灰度图,方法,dp=1,累加器和图像具有相同的分辨率,两个圆心具有的最小距离,边缘检测算子的高阈值,param2表示检测阶段圆心的累加器阈值,阈值越大,检测到的圆就越接近完美的圆,圆半径的最小值,圆半径的最大值。1或者2没有太大区别
#输出返回值,方便查看类型
print(circles)
#输出检测到圆的个数
print(len(circles[0]))

print('-------------我是条分割线-----------------')
#根据检测到圆的信息,画出每一个圆
for circle in circles[0]:
    #圆的基本信息
    print(circle[2])
    #坐标行列
    x=int(circle[0])
    y=int(circle[1])
    #半径
    r=int(circle[2])
    #在原图用指定颜色标记出圆的位置
    img=cv2.circle(img,(x,y),r,(0,0,255),2)#输入的图片,圆心坐标,半径,颜色,如果是负数就是实心圆,整数就是绘制圆的轮廓大小
#显示新图像
#cv2.namedWindow('res',cv2.WINDOW_NORMAL)#这句话是我自己加的,有这句话,红色乒乓球会充满整个屏幕,但是白色的就在左上角
cv2.imshow('res',img)#第一个是窗口名字,第二个是要显示的图像

#按任意键退出
cv2.waitKey(0)#函数可以持久的输出,没有这个函数,图像一闪而过,试了一下,还真是
cv2.destroyAllWindows()#销毁所有窗口,如果要销毁特定的窗口需要用destroyWindows(),括号内应该是要销毁图像的名称
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值