opencv轮廓特征值 滚动条控制阈值参数

滚动条控制阈值和阈值的处理方式

控制thres中的方式和阈值
在这里插入图片描述

import cv2


img = cv2.imread("p7.jpg")
#img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
type = 0#阈值的处理方式
value = 0#使用的阈值
def ontype(a):
    type = cv2.getTrackbarPos("Type","j")
    value = cv2.getTrackbarPos("tValue","j")
    ret,dst = cv2.threshold(img,value,255,type)
    cv2.imshow("j",dst)

def onvalue(a):
    type = cv2.getTrackbarPos("Type", "j")
    value = cv2.getTrackbarPos("tValue", "j")
    ret, dst = cv2.threshold(img, value, 255, type)
    cv2.imshow("j", dst)

cv2.imshow("j",img)
cv2.createTrackbar("Type","j",0,4,ontype)
cv2.createTrackbar("tValue","j",0,255,onvalue)
if cv2.waitKey(0) == 27:
    cv2.destroyWindow()

轮廓特征值

  • minMaxLoc的参数:图片须为单通道,mask为掩膜。可以用它得到指定感兴趣区域的最值。
  • findNonZero:获取一个轮廓点的位置(一般来说轮廓的像素点为非零值)
img = cv2.imread("deng.png")
img2 = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
rst,dst = cv2.threshold(img2,250,255,0)
conters = cv2.findContours(dst,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)[0]
img3 = cv2.drawContours(img.copy(),conters,-1,(100,222,255),3)
mask = np.zeros(img2.shape,dtype=np.uint8)
mask = cv2.drawContours(mask,conters,-1,(100,222,255),3)
loc2 = cv2.bitwise_and(mask,img2)
loc = cv2.bitwise_and(img,img3)
minval,maxval,minloc,maxloc = cv2.minMaxLoc(img2,mask=mask)
print(maxloc)
cv2.imshow("and",loc)
cv2.imshow("and2",loc2)
cv2.imshow("j",img3)

在这里插入图片描述

椭圆拟合

之前都是矩形,现在用椭圆拟合
上面的代码不变,加上这个:

ellipse = cv2.fitEllipse(conters[1])
cv2.ellipse(loc2,ellipse,(0,0,255),2)
cv2.ellipse(img2,ellipse,(0,0,255),2)
cv2.imshow(str(0),img2)
# cv2.imshow("and",loc)
cv2.imshow("and2",loc2)

在这里插入图片描述

提取颜色,用掩膜控制参数:

进行了一些开闭运算,不过感觉对这个图片来说没必要在这里插入图片描述

img = cv2.imread("deng.png")
cv2.imshow("i",img)
kenal = np.ones((10,10),np.uint8)
img = cv2.morphologyEx(img,cv2.MORPH_OPEN,kenal)
img = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kenal)
hsvimg = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
lower_red = np.array((150, 23, 70))

upper_red = np.array([180, 255, 255])
mask1 = cv2.inRange(hsvimg,lower_red,upper_red)
lower_red2 = np.array((0, 43, 35))

upper_red2 = np.array([11, 255, 255])
mask2 = cv2.inRange(hsvimg,lower_red2,upper_red2)
mask = mask1+mask2
img0 = cv2.bitwise_and(img,img,mask=mask)

cv2.imshow(str(0),img0)

获取一个特定点的阈值

今天才想到可以获取一个特定点的阈值,天哪,之前还试试试好久,浪费好多时间阿

img = cv2.imread("cv.png")
cv2.imshow("i",img)
kenal = np.ones((10,10),np.uint8)
hsvimg = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
def gethsv(event,x,y,flags,params):
    if event == cv2.EVENT_LBUTTONDOWN:
        print(hsvimg[x,y])


cv2.imshow("hi",hsvimg)
cv2.setMouseCallback("hi",gethsv)

在这里插入图片描述
在这里插入图片描述
存在下标溢出报错。

猜你喜欢

转载自blog.csdn.net/qq_41358574/article/details/114275567