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

  • 问题一

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

  • 问题二

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(),括号内应该是要销毁图像的名称

你可能感兴趣的:(霍夫圆,笔记,opencv,python,图像识别)