【问题标题】:Raspberry pi camera and opencv and python树莓派相机和opencv和python
【发布时间】:2023-07-23 20:36:01
【问题描述】:

我有下面的代码,我想在很多地方修改它:

如何使用 Raspbery Pi 摄像头代替 USB 摄像头?

如果有人给我提示或编写正确的代码,我将不胜感激。

代码是:

import cv2.cv as cv
import smbus
import cv2
bus = smbus.SMBus(1)
address = 0x04

def sendData(value):
    bus.write_byte(address, value)
    return -1
def readData():
    state = bus.read_byte(address)
    return state
def ColorProcess(img):
    imgHSV = cv.CreateImage(cv.GetSize(img) ,8 ,3)
    cv.CvtColor(img, imgHSV, cv.CV_BGR2HSV)
    imgProcessed = cv.CreateImage(cv.GetSize(img) ,8 ,1)
    cv.InRangeS(imgHSV, (100, 94, 84), (109, 171, 143), imgProcessed)
    return imgProcessed
def main():
    width = 320
    height = 240

    capture = cv.CreateCameraCapture(0)
    cv.SetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_WIDTH, width)
    cv.SetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_HEIGHT, height)
    cv.NamedWindow("output", 1)
    cv.NamedWindow("processed", 1)

    while True:
        frame = cv.QueryFrame(capture)
        cv.Smooth(frame, frame, cv.CV_BLUR, 3)
        imgColorProcessed = ColorProcess(frame)
        mat = cv.GetMat(imgColorProcessed)
        moments = cv.Moments(mat, 0)
        area = cv.GetCentralMoment(moments, 0, 0)
        moment10 = cv.GetSpatialMoment(moments, 1, 0)
        moment01 = cv.GetSpatialMoment(moments, 0, 1)

        if (area > 60000):
            posX = int(moment10/area)
            posY = int(moment01/area)
            ali = long(2000000)

            state = readData()
            if state == 1:
                sendData(posX)
                sendData(posY)

            print 'x: ' + str(posX) + 'y: ' + str(posY)

        cv.ShowImage("processed", imgColorProcessed)
        cv.ShowImage("output", frame)

        if cv.WaitKey(10) >= 0:

            break

    return;

if __name__ == "__main__":
        main()

我将非常感谢任何帮助。

谢谢。

【问题讨论】:

  • 每个问题一个问题,请
  • 如果你只回答一个,我将不胜感激。
  • @ITLover 我想说这是一个微妙的暗示,如果你想回答它,你应该把它分成 3 个单独的问题。
  • 感谢您的建议。我会把它分开。

标签: python-2.7 opencv arduino raspberry-pi3 smbus


【解决方案1】:

在 Pi 的 LX 终端中运行此命令。它将处理驱动程序。

sudo modprobe bcm2835-v4l2

【讨论】: