使用Python 2.7和OpenCV 3检查停车位是否已满

使用Python 2.7和OpenCV 3检查停车位是否已满,python,opencv3.0,Python,Opencv3.0,我试图将一个自动停车场改造成一个停车场,如果有蓝线,则视为空位,如果没有,则视为空位: 我尝试了很多东西,从基本颜色检测到边缘检测,甚至是特征匹配: 我当前使用的代码: import cv2 import numpy as np from picamera import PiCamera from picamera.array import PiRGBArray img = cv2.imread("CAT2.png") img = cv2.cvtColor(img, cv2.COLOR_BG

我试图将一个自动停车场改造成一个停车场,如果有蓝线,则视为空位,如果没有,则视为空位: 我尝试了很多东西,从基本颜色检测到边缘检测,甚至是特征匹配:

我当前使用的代码:

import cv2
import numpy as np
from picamera import PiCamera
from picamera.array import PiRGBArray
img = cv2.imread("CAT2.png")

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

camera = PiCamera()
camera.resolution = (320, 240)
rawCapture = PiRGBArray(camera, size=(320, 240))


sift = cv2.xfeatures2d.SIFT_create()
kp_image, desc_image = sift.detectAndCompute(img, None)

index_params = dict(algorithm=0, trees=5)
search_params = dict()
flann = cv2.FlannBasedMatcher(index_params, search_params)
for f in camera.capture_continuous(rawCapture, format="bgr",use_video_port = True):
    frame = rawCapture.array
    cropped = frame[0:80, 0:320]
    grayframe = cv2.cvtColor(cropped, cv2.COLOR_BGR2GRAY)

    kp_grayframe, desc_grayframe = sift.detectAndCompute(grayframe, None)
    matches = flann.knnMatch(desc_image, desc_grayframe, k=2)


    good_points = []
    for m, n in matches:
        if m.distance < 0.5*n.distance:
            good_points.append(m)

    img3 = cv2.drawMatches(img, kp_image, grayframe, kp_grayframe, good_points, grayframe)

cv2.imshow("Image", img)
    cv2.imshow("grayFrame", grayframe)
    cv2.imshow("img3", img3)
    key = cv2.waitKey(1)
    if key == 27:
        break
    rawCapture.truncate(0)

cv2.destroyAllWindows()
导入cv2
将numpy作为np导入
从picamera进口picamera
从picamera.array导入PiRGBArray
img=cv2.imread(“CAT2.png”)
img=cv2.cvt颜色(img,cv2.COLOR\u bgr2灰色)
照相机=皮卡梅拉()
相机分辨率=(320240)
rawCapture=PiRGBArray(摄像机,尺寸=(320240))
sift=cv2.xfeature2d.sift_create()
kp_image,desc_image=sift.detectAndCompute(img,无)
索引参数=dict(算法=0,树=5)
搜索参数=dict()
flann=cv2.FlannBasedMatcher(索引参数、搜索参数)
对于摄像机中的f.capture\u continuous(rawCapture,format=“bgr”,使用\u video\u port=True):
frame=rawCapture.array
裁剪=帧[0:80,0:320]
grayframe=cv2.CVT颜色(裁剪,cv2.COLOR\u BGR2GRAY)
kp_grayframe,desc_grayframe=sift.detectAndCompute(grayframe,无)
matches=flann.knMatch(描述图像,描述灰度帧,k=2)
好分数=[]
对于匹配中的m,n:
如果m.距离<0.5*n.距离:
好的分数。追加(m)
img3=cv2.绘图匹配(img、kp_图像、灰色帧、kp_灰色帧、良好点、灰色帧)
cv2.imshow(“图像”,img)
cv2.imshow(“灰色框架”,灰色框架)
cv2.imshow(“img3”,img3)
key=cv2.waitKey(1)
如果键==27:
打破
rawCapture.truncate(0)
cv2.destroyAllWindows()

然而,我尝试什么都不管用!我希望你能解释一下我是如何做到的,而不是为我做的。

Hi@huvarda,到目前为止你做了什么?你能发布你的代码吗?这是我的代码。你是想检测一条蓝线,还是想检测一辆车,然后画一条蓝线?我想检测一条蓝线我想我在功能检测方面有点过火了,因为没有那么多独特的功能