opencv使用的一些函数总结

加载np数组: np.load(textfile)

霍夫圆检测

circles = cv.HoughCircles(cimage, cv.HOUGH_GRADIENT, 1, 30, param1=50, param2=30, minRadius=50, maxRadius=90)
cv.HoughCircles(image, method, dp, minDist, circles, param1, param2, minRadius, maxRadius)

method:为使用霍夫变换圆检测的算法
dp:用来检测圆心的累加器图像的分辨率于输入图像之比的倒数,且此参数允许创建一个比输入图像分辨率低的累加器。例如,如果dp = 1时,累加器和输入图像具有相同的分辨率。如果dp = 2,累加器便有输入图像一半那么大的宽度和高度。
minDist:为圆心之间的最小距离,如果检测到的两个圆心之间距离小于该值,则认为它们是同一个圆心
param1:用于Canny的边缘阀值上限,下限被置为上限的一半。Candy边缘检测算子的高阈值,而低阈值为高阈值的一半。
param2:累加器的阀值。它表示在检测阶段圆心的累加器阈值,它越小,就越可以检测到更多根本不存在的圆,而它越大的话,能通过检测的圆就更接近完美的圆形了。
minRadius:所检测到的圆半径的最小值
maxRadius:所检测到的圆半径的最大值

candy边缘检测说明:
canny = cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient ]]])
第一个参数是需要处理的原图像单通道的灰度图,
第二个参数是阈值1,第二个参数是阈值2,较大的阈值2用于检测图像中明显的边缘,但一般情况下检测的效果不会那么完美,边缘检测出来是断断续续的。所以这时候应用较小的第一个阈值来将这些间断的边缘连接起来。
可选参数中aperturesize参数就是卷积核的大,
而L2gradient参数就是一个布尔值,如果为true,则就使用更精确的L2范数进行计算(即两个方向的倒数的平方和再开方),否则使用L1范数(直接将两个方向导数的绝对值相加)。

主要有cv2.line()//画线, cv2.circle()//画圆, cv2.rectangle()//长方形,cv2.ellipse()//椭圆, cv2.putText()//文字绘制
主要参数

img:源图像

color:需要传入的颜色

thickness:线条的粗细,默认值是1

linetype:线条的类型,8 连接,抗锯齿等。默认情况是 8 连接。cv2.LINE_AA 为抗锯齿,这样看起来会非常平滑。

参数调节
huofu: 1 , 30, 200, 50 ,10 ,300 图像4
huofu:1,30, 200, 50, 10, 100

图片resize
实现缩放图片并保存,在使用OpenCV时常用的操作。cv2.resize()支持多种插值算法,默认使用cv2.INTER_LINEAR,缩小最适合使用:cv2.INTER_AREA,放大最适合使用:cv2.INTER_CUBIC或cv2.INTER_LINEAR。
res=cv2.resize(image,(2width,2height),interpolation=cv2.INTER_CUBIC)?
或者:
res=cv2.resize(image,None,fx=2,fy=2,interpolation=cv2.INTER_CUBIC)?
此处None本应该是输出图像的尺寸,因为后边设置了缩放因子

图像灰度、二值化
img_gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
ret,th1 = cv2.threshold(img_gray,200,255,cv2.THRESH_BINARY)

轮廓检测
检测点
contours, hierarchy=cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]])
image, contour, hierarchy = cv2.findContours(th1,mode, cv2.CHAIN_APPROX_NONE)

mode:
cv2.RETR_EXTERNAL:只检测最外层轮廓,并置hierarchy[i][2]=hierarchy[i][3]=-1
cv2.RETR_LIST:提取所有轮廓并记录在列表中,轮廓之间无等级关系
cv2.RETR_CCOMP:提取所有轮廓并建立双层结构(顶层为连通域的外围轮廓,底层为孔的内层边界)
cv2.RETR_TREE:提取所有轮廓,并重新建立轮廓层次结构
method:
cv2.CHAIN_APPROX_NONE:获取每个轮廓的每个元素,相邻像素的位置差不超过1,即连续的点,但通常我们并不需要所有的点
cv2.CHAIN_APPROX_SIMPLE:压缩水平方向、垂直方向和对角线方向的元素,保留该方向的终点坐标,如矩形的轮廓可用4个角点表示,这是一种常用的方法,比第一种方法能得出更少的点
画出图像来

def drawContours(image,counts): #根据点画出点图像
    color = cv2.cvtColor(image, cv2.COLOR_GRAY2BGR)
    dst = cv2.drawContours(color, counts, -1, (0,255,0), 2) 
    cv2.imshow("dst", dst)
    cv2.waitKey(0)

图像腐蚀和膨胀可以增强线条或减细线条,开闭操作可以去噪

kernel = np.ones((k,k),np.uint8)
erosion = cv2.erode(image,kernel,iterations = 1)
dilation = cv2.dilate(image,kernel,iterations = 1)

检测圆的方法:
可以和圆点进行对比,得分越小,则越逼近圆形。

cv2.matchShapes(cnt1,cnt2,1,0.0)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值