日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

树莓派摄像头运用python颜色识别

發布時間:2023/12/20 python 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 树莓派摄像头运用python颜色识别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

運用攝像頭拍照

import cv2 import osoutput_dir ='/home/pi/Desktop/py' i = 1 cap = cv2.VideoCapture(0) while 1:ret, frame = cap.read()cv2.imshow('cap', frame)flag = cv2.waitKey(1)if flag == 13:#按下回車鍵output_path = os.path.join(output_dir, "%04d.jpg" % i)cv2.imwrite(output_path, frame)i += 1if flag == 27:#按下ESC鍵break

對顏色的hsv值進行選擇

import cv2
import numpy as np

def nothing(x):
pass

use track bar to perfectly define (1/2)

the lower and upper values for HSV color space(2/2)

cv2.namedWindow("Tracking") #參數:1 Lower/Upper HSV 3 startValue 4 endValue cv2.createTrackbar("LH","Tracking",35,255,nothing) cv2.createTrackbar("LS","Tracking",43,255,nothing) cv2.createTrackbar("LV","Tracking",46,255,nothing) cv2.createTrackbar("UH","Tracking",77,255,nothing) cv2.createTrackbar("US","Tracking",255,255,nothing) cv2.createTrackbar("UV","Tracking",255,255,nothing)while True:frame = cv2.imread('/home/pi/Desktop/py/0002.jpg')#這里是你照片存放的路徑hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)l_h = cv2.getTrackbarPos("LH","Tracking")l_s = cv2.getTrackbarPos("LS","Tracking")l_v = cv2.getTrackbarPos("LV","Tracking")u_h = cv2.getTrackbarPos("UH","Tracking")u_s = cv2.getTrackbarPos("US","Tracking")u_v = cv2.getTrackbarPos("UV","Tracking")l_g = np.array([l_h, l_s, l_v]) # lower green valueu_g = np.array([u_h,u_s,u_v])mask = cv2.inRange(hsv,l_g,u_g)res=cv2.bitwise_and(frame,frame,mask=mask) # src1,src2cv2.imshow("frame", frame)cv2.imshow("mask", mask)cv2.imshow("res", res)key = cv2.waitKey(1)if key == 27: # Escbreakcv2.destroyAllWindows()

對顏色的畫框捕抓

import cv2 import numpy as np import imutils from imutils import contours #import RPi.GPIO as GPIO#PIN5=5#引腳選用,選用GPIO5 #PIN6=6#選用GPIO6 #auto=0 #straight_line_speed=9 #電機最大的旋轉速度,百分比值為#5.8。不轉時的百分比值為10.5 #circle_speed=9 #servo_straight=8.2 #GPIO.setmode(GPIO.BCM) #GPIO.setup(PIN5,GPIO.OUT) #GPIO.setup(PIN6,GPIO.OUT) #pwm_servo=GPIO.PWM(PIN5,58.8)#pin5用于舵機 #pwm_motor=GPIO.PWM(PIN6,58.8)#pin6用于電機 #pwm_servo.start(0)#初始占空比 #pwm_motor.start(0)# 顏色閾值 lower = np.array([158,139,49]) upper = np.array([255,255,212]) # 內核 kernel = np.ones((5, 5), np.uint8)# 打開攝像頭 vc = cv2.VideoCapture(0) if vc.isOpened():flag, frame = vc.read()# 翻轉圖像# 這一步可以忽略,博主的攝像頭是反著的# 所以加上這句話可以讓攝像頭的圖像正過來#frame = imutils.rotate(frame, 180)cv2.imshow("frame", frame) else:flag = False''''def servo(a):if auto:pwm_servo.ChangeDutyCycle(a)else:GPIO.setup(PIN5,GPIO.IN,pull_up_down=GPIO.PUD_UP)#設置引腳5為輸入引腳,并開啟上拉電阻def motor(a):if auto:pwm_motor.ChangeDutyCycle(a)else:GPIO.setup(PIN6,GPIO.IN,pull_up_down=GPIO.PUD_UP)#設置引腳6為輸入引腳,并開啟上拉電阻''''def find_color():flag, frame = vc.read()# 翻轉圖像#frame = imutils.rotate(frame, 180)draw_frame = frame.copy()#if frame is None:# breakif flag is True:'''下面對攝像頭讀取到的圖像進行處理,這個步驟是比較重要的'''# 轉換顏色空間HSVframe_hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)# 顏色識別img = cv2.inRange(frame_hsv, lower, upper)# 膨脹操作dilation = cv2.dilate(img, kernel, iterations=2)# 閉操作closing = cv2.morphologyEx(dilation, cv2.MORPH_CLOSE, kernel)# 高斯濾波closing = cv2.GaussianBlur(closing, (5, 5), 0)# 邊緣檢測edges = cv2.Canny(closing, 10, 20)'''上面進行那么多操作就是為了得到更好的目標圖形,具體效果因環境而異'''# 尋找輪廓cnts, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)# 判斷輪廓數量也就是判斷是否尋找到輪廓,如果沒有找到輪廓就不繼續進行操作if len(cnts) > 0:# 存放輪廓面積的列表s = []# 存放最大輪廓的索引max_index = 0# 獲得排序后的輪廓列表以及每個輪廓對應的外接矩形(cnts, boundingRects) = contours.sort_contours(cnts)# 尋找面積最大的輪廓的索引for cnt in cnts:s.append(cv2.contourArea(cnt))max_index = s.index(max(s))# 根據面積最大輪廓的索引找到它的外接矩形的信息(x, y, w, h) = boundingRects[max_index]# 畫矩形frame_out = cv2.rectangle(draw_frame, (x, y), (x+w, y+h), (0, 255, 0), 2)'''' if 140<x<300:#print("直走") servo(servo_straight)motor(straight_line_speed)if x<=140:#print("turn right")servo(servo_straight-1.5)motor(circle_speed)if x>=300: #print("left")servo(servo_straight+1.5)motor(circle_speed)else:#print("find")servo(servo_straight-1.5)motor(circle_speed)'''' cv2.imshow("frame", draw_frame)while(True):find_color()if cv2.waitKey(10) == 27:breakvc.release() cv2.destroyAllWindows() GPIO.cleanup()#清空引腳定義,設置為輸入狀態,防止接短路

總結

以上是生活随笔為你收集整理的树莓派摄像头运用python颜色识别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。