zoukankan      html  css  js  c++  java
  • Python-1 试玩OpenCV

    昨天同事说微信更新有跳一跳小游戏,便更新了玩一玩。至于抄袭不抄袭我不讨论,看玩法和色彩都很简洁。想用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()
    

    hello

    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()
    

    camera
    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真方便,写那些库的人更牛啊。
    saveImg

    处理图片

    进跳一跳游戏抓取一张图

    看看都可以干些什么,应该是去噪什么的吧(其实我都不懂,手动笑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()
    

    aha

    18年一定要多读书要努力学习啊我的豆。

    参考资料

  • 相关阅读:
    java.sql.SQLException: Access denied for user 'root'@'10.1.0.2' (using password: YES)
    在eclipse中安装使用lombok插件
    Socket编程实践(5) --TCP粘包问题与解决
    Socket编程实践(8) --Select-I/O复用
    Socket编程实践(6) --TCP服务端注意事项
    Socket编程实践(4) --多进程并发server
    Socket编程实践(3) --Socket API
    Socket编程实践(2) --Socket编程导引
    Socket编程实践(1) --TCP/IP简述
    Socket编程实践(11) --epoll原理与封装
  • 原文地址:https://www.cnblogs.com/warcraft/p/8145894.html
Copyright © 2011-2022 走看看