将OpenCV网络摄像头集成到Kivy用户界面中

uqxowvwt  于 2023-10-24  发布在  其他
关注(0)|答案(2)|浏览(158)

我目前的程序是在Python和使用OpenCV.我依赖于网络摄像头捕获,我处理每一个捕获的帧:

import cv2

# use the webcam
cap = cv2.VideoCapture(0)
while True:
    # read a frame from the webcam
    ret, img = cap.read()
    # transform image

我想做一个Kivy界面(或另一个图形用户界面)与按钮,保持现有的功能与网络摄像头捕捉。
我发现了这个例子:https://kivy.org/docs/examples/gen__camera__main__py.html-但它没有解释如何获取网络摄像头图像以使用OpenCV处理它。
我发现了一个老的例子:http://thezestyblogfarmer.blogspot.it/2013/10/kivy-python-script-for-capturing.html-它使用“截图”功能将截图保存到磁盘。然后我可以读取保存的文件并处理它们,但这似乎是一个不必要的步骤。
我还能试试什么?

tkclm6bt

tkclm6bt1#

在这里找到这个例子:https://groups.google.com/forum/#!topic/kivy-users/N18 DmblNWb 0
它将opencv捕获的图像转换为kivy纹理,这样你就可以在kivy界面上显示之前进行各种cv转换。

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

s3fp2yjn2#

  • 注意:* 我不知道OpenCV是如何工作的,但我发现了camera_opencv.py,所以这意味着有一个简单的方法来使用它。

正如你在相机示例中看到的,这是默认的方式,当你在__init__.py中查找相机时,你可以在提供程序中看到opencv,所以它可能与OpenCV一起工作。如果你可以看到OpenCV被检测为提供程序,请检查日志。如果检测到CameraOpenCV,你应该看到它被写在某处,并且它应该在捕获图像时显示自己。
然而,如果你想直接使用OpenCV(即cap.read()和类似的东西),那么你需要为提供程序编写自己的处理程序,或者在camera_opencv文件中附加更多的选项。

相关问题