将OpenCV网络摄像头集成到Kivy用户界面中 [英] Integrate OpenCV webcam into a Kivy user interface
问题描述
我当前的程序是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 —使用"screenshot"功能将屏幕截图保存到磁盘.然后,我可以读取保存的文件并进行处理,但这似乎是不必要的步骤.
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用户界面中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!