Python 如何检测等高线的位置
一般来说,我对opencv和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
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我会读的