昨天同事說微信更新有跳一跳小游戲,便更新了玩一玩。至於抄襲不抄襲我不討論,看玩法和色彩都很簡潔。想用Python試試攝像頭捕捉圖像,然後分析距離每次都能跳到中心,有生物機械手指之類的再弄到樹莓派上豈不是能玩最高分啦。 心路歷程 環境是windows,安裝opencv 需要其他包的可另行下載。 hel ...
昨天同事說微信更新有跳一跳小游戲,便更新了玩一玩。至於抄襲不抄襲我不討論,看玩法和色彩都很簡潔。想用Python試試攝像頭捕捉圖像,然後分析距離每次都能跳到中心,有生物機械手指之類的再弄到樹莓派上豈不是能玩最高分啦。 -心路歷程
環境是windows,安裝opencv
pip install opencv-python
需要其他包的可另行下載。
hello, OpenCV
import cv2 as cv
img=cv.imread("404.jpg") #讀取圖像
cv.imshow("who",img)
cv.waitKey(0)
cv.destroyAllWindows()
hallo, camera
打開攝像頭
#打開攝像頭
import cv2
import numpy
import matplotlib.pyplot as plot
#攝像頭對象
cap=cv2.VideoCapture(0)
#顯示
while(1):
ret,frame = cap.read()
cv2.imshow("capture",frame)
if(cv2.waitKey(1) & 0xFF==ord('q')):
break
cap.release()
cv2.destroyAllWindows()
按q退出時,為什麼要用0xFF呢?& 比 == 優先順序高,所以先截取最後八位,再做比較。
保存圖片
攝像頭打開後就要保存圖片,也很方便呢。
#保存圖片
import cv2
cap = cv2.VideoCapture(0)
i=0
while(1):
ret, frame = cap.read()
cv2.imshow("capture", frame)
if cv2.waitKey(1) & 0xFF == ord(' '):
i=i+1
imgName="i_"+str(i)
cv2.imwrite("img/"+imgName+".jpeg", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
比上一版的多了一個按空格保存圖片,雖然然觸體驗並不好,但是感覺好爽啊,Python真方便,寫那些庫的人更牛啊。
處理圖片
進跳一跳游戲抓取一張圖
看看都可以幹些什麼,應該是去噪什麼的吧(其實我都不懂,手動笑cry.jpg
想要獲取距離,看大家都在說二值化那就二值化試試效果:
圖像信息二值化
import cv2 as cv
#灰度模式讀取圖像
img=cv.imread("img/i1.jpeg",0)
#設置閾值進行二值化
th=100
ret,binary1=cv.threshold(img,th,255,cv.THRESH_BINARY_INV)
ret,binary2=cv.threshold(img,th,255,cv.THRESH_BINARY)
ret,binary3=cv.threshold(img,th,255,cv.THRESH_TRUNC)
ret,binary4=cv.threshold(img,th,255,cv.THRESH_TOZERO)
ret,binary5=cv.threshold(img,th,255,cv.THRESH_TOZERO_INV)
ret,binary6=cv.threshold(img,th,255,cv.THRESH_OTSU)
ret,binary7=cv.threshold(img,th,255,cv.THRESH_TRIANGLE)
cv.imshow("THRESH_BINARY_INV",binary1)
cv.imshow("THRESH_BINARY",binary2)
cv.imshow("THRESH_TRUNC",binary3)
cv.imshow("THRESH_TOZERO",binary4)
cv.imshow("THRESH_TOZERO_INV",binary5)
cv.imshow("THRESH_OTSU",binary6)
cv.imshow("THRESH_TRIANGLE",binary7)
cv.waitKey(0)
cv.destroyAllWindows()
顯示輪廓
費了好大力才走到這步,然後沒有頭緒,各種公式各種圖像處理看不懂,還是獲取不了距離,下了matplotlib和numpy庫也還沒用上。
最後,就混合一下所學的東西吧。
顯示邊緣輪廓
#攝像頭並顯示輪廓
import cv2
cap = cv2.VideoCapture(0)
i=0
while(1):
ret, frame = cap.read()
img_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
img_gb = cv2.GaussianBlur(img_gray, (5, 5), 0)
edges = cv2.Canny(img_gb, 100 , 200)
cv2.imshow("capture", edges)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
18年一定要多讀書要努力學習啊我的豆。