Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.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
Python 如何检测等高线的位置_Python_Opencv_Image Processing - Fatal编程技术网

Python 如何检测等高线的位置

Python 如何检测等高线的位置,python,opencv,image-processing,Python,Opencv,Image Processing,一般来说,我对opencv和python都很陌生。我想制作一个程序,用摄像机计算汽车数量。我已经做了这个程序,我已经找到了等高线,但问题是我不知道如何知道等高线在哪条车道上的确切位置。我用下面的颜料做了一个例子 在上图中,北面有一辆车,南面有两辆车,西面有三辆车,东面有两辆车。我想知道如何检测轮廓的位置。多谢各位 from picamera.array import PiRGBArray from picamera import PiCamera import picamera.array im

一般来说,我对opencv和python都很陌生。我想制作一个程序,用摄像机计算汽车数量。我已经做了这个程序,我已经找到了等高线,但问题是我不知道如何知道等高线在哪条车道上的确切位置。我用下面的颜料做了一个例子

在上图中,北面有一辆车,南面有两辆车,西面有三辆车,东面有两辆车。我想知道如何检测轮廓的位置。多谢各位

from picamera.array import PiRGBArray
from picamera import PiCamera
import picamera.array
import numpy as np
import time
import cv2
import RPi.GPIO as GPIO
import time
import sign2

GPIO.setmode(GPIO.BCM)


cam = PiCamera()
cam.resolution=(480,480)
cam.framerate=30
raw=PiRGBArray(cam, size=(480,480))

time.sleep(0.1)

colorLower = np.array([0,100,100])
colorUpper = np.array([179,255,255])

purplelow = np.array([125,100,100])
purpleup = np.array([136,255,255])

initvert = 0
inithoriz = 0
initverta = 0
inithoriza = 0




for frame in cam.capture_continuous(raw, format="bgr", use_video_port=True):
    frame = frame.array
    hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)

    purplemask = cv2.inRange(hsv,purplelow,purpleup)
    
    mask = cv2.inRange(hsv,colorLower,colorUpper)
    mask = cv2.blur(mask,(3,3))
    mask= cv2.dilate(mask,None,iterations=5)
    mask= cv2.erode(mask,None,iterations=1)
    mask= cv2.dilate(mask,None,iterations=3)

    purplemask = cv2.inRange(hsv,purplelow,purpleup)
    purplemask = cv2.blur(purplemask,(3,3))
    purplemask= cv2.dilate(purplemask,None,iterations=5)
    purplemask= cv2.erode(purplemask,None,iterations=1)
    purplemask= cv2.dilate(purplemask,None,iterations=3)
    

    
    me,thresh = cv2.threshold(mask,127,255,cv2.THRESH_BINARY)
    me,thresh2 = cv2.threshold(mask,127,255,cv2.THRESH_BINARY)
    
    cnts = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)[-2]
    center = None
    cnts2 = cv2.findContours(thresh2,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)[-2]
    center = None

    vert = 0
    horiz = 0
    verta = 0
    horiza = 0 

要在代码中查找轮廓及其质心,请添加以下内容。质心列表存储在
centroids

conts, hier = cv2.findContours(thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
centroids = []

for c in conts[0:-1]:       
    x = int(sum(c[:,0,0]) / len(c))
    y = int(sum(c[:,0,1]) / len(c))
    centroids.append([x, y])
    # if you want to display on original image
    cv2.circle(frame, (x, y), 3, (255, 255, 0), -1) 

你能发布你正在使用的代码吗?因为这将使回答你的问题更容易设置轮廓边界框并使用质心或左上角。请参阅和@DrBwts我已经发布了code@fmw42我会读的