問題描述
我當前的程序是 Python 并使用 OpenCV.我依靠網絡攝像頭捕獲,并且正在處理每個捕獲的幀:
My current program is in Python and uses OpenCV. I rely on webcam captures and I am processing every captured frame:
import cv2
# use the webcam
cap = cv2.VideoCapture(0)
while True:
# read a frame from the webcam
ret, img = cap.read()
# transform image
我想制作一個帶有按鈕的 Kivy 界面(或其他圖形用戶界面),同時通過網絡攝像頭捕獲現有功能.
I would like to make a Kivy interface (or another graphical user interface) with buttons, keeping already existing functionality with webcam captures.
我找到了這個例子:https://kivy.org/docs/examples/gen__camera__main__py.html— 但它沒有解釋如何獲取網絡攝像頭圖像以使用 OpenCV 對其進行處理.
I found this example: https://kivy.org/docs/examples/gen__camera__main__py.html — but it doesn’t explain how to acquire the webcam image to process it with OpenCV.
我找到了一個較舊的示例:http://thezestyblogfarmer.blogspot.it/2013/10/kivy-python-script-for-capturing.html— 它使用屏幕截圖"功能將屏幕截圖保存到磁盤.然后我可以讀取保存的文件并進行處理,但這似乎是不必要的步驟.
I found an older example: http://thezestyblogfarmer.blogspot.it/2013/10/kivy-python-script-for-capturing.html — it saves screenshots to disk using the ‘screenshot’ function. Then I can read the saved files and process them, but this seems to be an unnecessary step.
我還能嘗試什么?
推薦答案
在這里找到這個例子:https://groups.google.com/forum/#!topic/kivy-users/N18DmblNWb0
它將 opencv 捕獲轉換為 kivy 紋理,因此您可以在將其顯示到您的 kivy 界面之前進行各種 cv 轉換.
It converts the opencv captures to kivy textures, so you can do every kind of cv transformations before displaying it to your kivy interface.
__author__ = 'bunkus'
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.image import Image
from kivy.clock import Clock
from kivy.graphics.texture import Texture
import cv2
class CamApp(App):
def build(self):
self.img1=Image()
layout = BoxLayout()
layout.add_widget(self.img1)
#opencv2 stuffs
self.capture = cv2.VideoCapture(0)
cv2.namedWindow("CV2 Image")
Clock.schedule_interval(self.update, 1.0/33.0)
return layout
def update(self, dt):
# display image from cam in opencv window
ret, frame = self.capture.read()
cv2.imshow("CV2 Image", frame)
# convert it to texture
buf1 = cv2.flip(frame, 0)
buf = buf1.tostring()
texture1 = Texture.create(size=(frame.shape[1], frame.shape[0]), colorfmt='bgr')
#if working on RASPBERRY PI, use colorfmt='rgba' here instead, but stick with "bgr" in blit_buffer.
texture1.blit_buffer(buf, colorfmt='bgr', bufferfmt='ubyte')
# display image from the texture
self.img1.texture = texture1
if __name__ == '__main__':
CamApp().run()
cv2.destroyAllWindows()
這篇關于將 OpenCV 網絡攝像頭集成到 Kivy 用戶界面中的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!