Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的py代码中使用多个python文件时出错_Python_Opencv - Fatal编程技术网

我的py代码中使用多个python文件时出错

我的py代码中使用多个python文件时出错,python,opencv,Python,Opencv,对于一个学校项目,我需要在多个文件中编写python代码,以实现更好的组织 我使用Opencv 3.2 我做这件事很痛苦,事实上我用了两次颜色检测程序 这是我的主要任务 # Set default logging handler to avoid "No handler found" warnings. import logging from DetectGreen import DetectGreen from camera import Camera import sys from

对于一个学校项目,我需要在多个文件中编写python代码,以实现更好的组织

我使用Opencv 3.2

我做这件事很痛苦,事实上我用了两次颜色检测程序

这是我的主要任务

    # Set default logging handler to avoid "No handler found" warnings.
import logging
from DetectGreen import DetectGreen
from camera import Camera
import sys
from time import sleep
import threading
LOGGER = logging.getLogger(__name__)


class Main(object):

    camera = Camera()
    detectred = DetectGreen(hLower=0, uLower=0, vLower=0,
                            hUpper=255, uUpper=255, vUpper=255)

    detectgreen = DetectGreen(hLower=154, uLower=66, vLower=250,
                              hUpper=179, uUpper=132, vUpper=255)

    logging.basicConfig(level=logging.DEBUG,
                        format="%(levelname)s %(asctime)s [%(process)d] %(name)s %(filename)s:%(lineno)d %(message)s",
                        )

    def __init__(self):
        """Initialize MyClassManager instance."""
        LOGGER.debug("Create instance of MyClassManager")
        super(Main, self).__init__()
        self._worker = None
        LOGGER.info("End of init...")

    camera.start()
    sleep(5)
    detectred.start()
    detectgreen.start()
这是我的相机课程,它非常好用:

import cv2
import numpy as np
import threading
from time import sleep
import logging

LOGGER = logging.getLogger(__name__)


class Camera(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.end = False
        self.ret = True
        self.frame = ["", ""]

    def run(self):
        self.instantiate()
        while not self.end:
            # Read image
            self.ret, self.frame = self.cam.read()
            cv2.imshow('frame', self.frame)
            if cv2.waitKey(1) & 0xFF == ord('q'):
                self.end = True
                LOGGER.info("Clean before finish working...")

    def afficher(self):
        print("Resultat methode affichage")

    def instantiate(self):
        self.cam = cv2.VideoCapture(0)
以下是我的颜色检测:

# Standard imports
import cv2
import numpy as np
import threading
from time import sleep
import logging
from camera import Camera

LOGGER = logging.getLogger(__name__)


class DetectGreen(threading.Thread):
    def __init__(self,
                 hLower, uLower, vLower,
                 hUpper, uUpper, vUpper):
        self._camera = Camera()
        threading.Thread.__init__(self)
        # self._stopper = threading.Event()
        LOGGER.info("Create thread DetectGreen")
        self._hLower = hLower
        self._hUpper = hUpper
        self._uLower = uLower
        self._uUpper = uUpper
        self._vLower = vLower
        self._vUpper = vUpper

    def run(self):
        mask = (0, 0, 0)
        end = False
        print("lancement")
        LOGGER.info("DetectGreen Start worker...")
        while not end:
            LOGGER.info("DetectGreen Working...")
            sleep(1)
            # Read image
            # cam = cv2.VideoCapture(0)

            while(1):
                if not self._camera.ret:
                    break

                canvas = self._camera.frame.copy()
                print("132")
                hsv = cv2.cvtColor(self._camera.frame, cv2.COLOR_BGR2HSV)
                lower = (self._hLower, self._uLower, self._vLower)  # 130,150,80
                upper = (self._hUpper, self._uUpper, self._vUpper)  # 250,250,120
                mask = cv2.inRange(hsv, lower, upper)
                mask = cv2.erode(mask, None, iterations=6)
                mask = cv2.dilate(mask, None, iterations=4)
                cv2.imshow('frame', self.frame)
                try:
                    # NB: using _ as the variable name for two of the outputs, as they're not used
                    _, contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
                    blob = max(contours, key=lambda el: cv2.contourArea(el))
                    M = cv2.moments(blob)
                    center = (int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"]))

                    cv2.circle(canvas, center, 10, (0, 0, 255), -1)
                except (ValueError, ZeroDivisionError):
                    pass
颜色检测给我的“转换”带来了巨大的困难。我真的不知道如何使用copy()而不在ColorDetection程序中出错(
self.\u camera.frame.copy()
)给我以下错误“'list'对象没有属性'copy'”,我理解,但是的,我的帧是一个垫子,也许我对它的定义不正确?还是有线程问题


DetectColor使用摄像头和主摄像头以良好的顺序启动每个任务。我有两个py文件要集成。

你的问题似乎与“在多个文件中组织代码”无关。请给它一个更合适的标题。只是编辑了它,我只是不知道这个词来真正定义我的问题,我认为这是一个组织问题,但我不能指出关键问题。我不太明白你的问题。self.\u camera.frame是在camera.\u init\u中定义的列表,在camera.run中被覆盖。发生错误时,从未调用过Camera.run,因此self.\u Camera.frame仍然是一个列表,没有复制方法,因此无法工作。是的,我确切地知道你的意思,如何获取在Camera.run中覆盖的“frame”?谢谢