簡體   English   中英

如何從picamera(python,opencv)中提取數組中的圖像

[英]how to abstract images in an array from picamera(python , opencv)

我在皮卡梅拉很新。 現在,我想通過攝像頭檢測簡單的動作,並使用cv2.absdiff() 但是,我得到的數組(image1,image2)是相同的。 如何獲得用於抽象的不同數組或獲取數組中的元素(圖像)? 這是我的代碼:

import sys
sys.path.append('/usr/local/lib/python2.7/site-packages')
from picamera.array import PiRGBArray
from picamara import PiCamera
import cv2
import time
import time
import numpy as np

camera = PiCamera()
camera.resolution = (640,480)
camera.framerate = 32
rawCapture = PiRGBArray(camera,size=(640,480))

time.sleep(0.1)

for frame in camera.capture_continuous(rawCapture,format="bgr",use_video_port=True):

    image1 = frame.array
    gray1 = cv2.cvtColor(image1,cv2.COLOR_BGR2GRAY)
    cv2.waitKey(33)
    image2 = frame.array
    gray2 = cv2.cvtColor(image2,cv2.COLOR_BGR2GRAY)

    diff = cv2.absdiff(gray1,gray2)
    cv2.imshow("DIFF",diff)

    key = cv2.waitKey(33)&0xFF
    rawCapture.truncate(0)
    if key == ord("q"):
        break

您的腳本正在嘗試將同一幀與其自身進行比較,這顯然不會顯示任何差異。

一種方法是在開始循環之前獲取一個初始幀,然后將其與任何后續幀進行比較,如下所示:

import sys
#sys.path.append('/usr/local/lib/python2.7/site-packages')
from picamera.array import PiRGBArray
from picamara import PiCamera
import cv2
import time
import time
import numpy as np

camera = PiCamera()
camera.resolution = (640,480)
camera.framerate = 32
rawCapture = PiRGBArray(camera,size=(640,480))
time.sleep(0.1)
initial_frame = camera.capture(rawCapture, format="bgr", use_video_port=True):

for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
    cv2.waitKey(33)
    image2 = frame.array
    gray = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)

    diff = cv2.absdiff(initial_frame, gray)
    cv2.imshow("DIFF", diff)

    key = cv2.waitKey(33) & 0xFF
    rawCapture.truncate(0)

    if key == ord("q"):
        break 

您可以進一步增強它以定期更新初始幀,以解決對背景的任何長期更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM