滚动条控制阈值和阈值的处理方式
控制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)
存在下标溢出报错。