opencv黑白线循迹
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                opencv黑白线循迹
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                
                            
                            
                            import cv2 as cv
import numpy as np
import timedef xunji():cap = cv.VideoCapture(0, cv.CAP_DSHOW)cap.set(3, 600)cap.set(4, 600)if cap.isOpened():while 1:ret, frame = cap.read()res = cv.resize(frame, None, fx=0.5, fy=0.5)cv.imshow("res", res)#   顏色空間轉換res1 = cv.cvtColor(res, cv.COLOR_BGR2GRAY)res2 = cv.cvtColor(res, cv.COLOR_BGR2HSV)#   圖像閾值設置ret0, thresh1 = cv.threshold(res1, 80, 255, cv.THRESH_BINARY)#   高斯濾波blur = cv.medianBlur(thresh1, 5)#   形態學運算kernel = np.ones((5, 5), np.uint8)cvOpen = cv.morphologyEx(blur, cv.MORPH_OPEN, kernel)  # 開運算cv.imshow("cvOpen", cvOpen)#   kirsch算子m1 = np.array([[5, 5, 5], [-3, 0, -3], [-3, -3, -3]])m2 = np.array([[-3, 5, 5], [-3, 0, 5], [-3, -3, -3]])m3 = np.array([[-3, -3, 5], [-3, 0, 5], [-3, -3, 5]])m4 = np.array([[-3, -3, -3], [-3, 0, 5], [-3, 5, 5]])m5 = np.array([[-3, -3, -3], [-3, 0, -3], [5, 5, 5]])m6 = np.array([[-3, -3, -3], [5, 0, -3], [5, 5, -3]])m7 = np.array([[5, -3, -3], [5, 0, -3], [5, -3, -3]])m8 = np.array([[5, 5, -3], [5, 0, -3], [-3, -3, -3]])filterlist = [m1, m2, m3, m4, m5, m6, m7, m8]  # 將各個方向的卷積核放到一起便于統一操作filtered_list = np.zeros((8, cvOpen.shape[0], cvOpen.shape[1]))  # 建立三維數組,第0維表示各個方向卷積后的值for k in range(8):out = cv.filter2D(cvOpen, cv.CV_16S, filterlist[k])  # 自定義卷積,其實里面的步驟跟Sobel算子是差不多的filtered_list[k] = outfinal = np.max(filtered_list, axis=0)  # 取八個方向中的最大值,也就是取第0維的最大值作為圖像該點,濾波之后的新的像素值final[np.where(final >= 255)] = 255  # 令像素值大于255的點等于255final[np.where(final < 255)] = 0  # 令像素值小于255的點等于0cv.imshow("final", final)#   判斷try:m = []w = []p = []height = int(final.shape[0])width = int(final.shape[1])i = 0while i < height-1:n = []if len(m) < 20:for j in range(10, width-1):if final[i, j] == final[i, j+1] and final[i, j+1] == 0:j += 2elif final[i, j] != final[i, j+1] and final[i, j + 1] == 255:n.append(j+1)# print(n)if len(n) != 0:w.append(n)m.append(len(n))i += 2a = 0t = 1for k in range(len(m)):if m[k] == 0:p.append(0)if m[k] == 1:p.append((2*w[k][0] + 40)/2)if m[k] == 2:p.append((w[k][0] + w[k][1])/2)if m[k] == 3:p.append((w[k][0] + 40)/2)# if 60 < sum(m) <= 80 and a == 0:#     if t == 1:#         p.append((w[k][0] + w[k][1]) / 2)#     elif t == 2:#         p.append((w[k][3] + w[k][2]) / 2)#     elif t == 3:#         p.append((w[k][0] + w[k][1]) / 2)#     elif t == 4:#         p.append((w[k][0] + w[k][1]) / 2)#     a = 1# elif m[k] == 2 and a:#     t += 1#     a = 0p.remove(max(p))p.remove(min(p))print("距離中心:%.2f" %(165-sum(p)/(len(p)-1)))except Exception as e:print(e)low_yellow = np.array([26, 43, 46])high_yellow = np.array([34, 255, 255])mask = cv.inRange(res2, low_yellow, high_yellow)open = cv.morphologyEx(mask, cv.MORPH_OPEN, kernel)edges = cv.Canny(open, 10, 20)cnts, _ = cv.findContours(edges, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_NONE)if len(cnts) > 0:breakcv.imshow("mask", edges)if cv.waitKey(1) == ord('q'):breakcap.release()cv.destroyAllWindows()if __name__ == "__main__":xunji() 
                            
                        
                        
                        總結
以上是生活随笔為你收集整理的opencv黑白线循迹的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: halcon 粘连物体分割
 - 下一篇: 没撑过2020,我从外包公司离职了