【问题标题】:Object detection with color, opencv, python使用颜色、opencv、python 进行对象检测
【发布时间】:2021-08-29 19:37:14
【问题描述】:

我正在尝试检测一个简单的对象,然后检测他的颜色。我创建了自己的CUSTOM HAARCASCADE,但它会将相机的图像转换为灰度。也许我可以通过面具检测到物体?我在网上没有找到任何关于此的文章。

如果你需要,这是我的代码:

import cv2
import numpy as np

################################################################
#path = 'haarcascades/haarcascade_eye.xml'  # PATH OF THE CASCADE
path = 'haarcascades/Azuolas.xml'  # PATH OF THE CASCADE
#path = 'haarcascades/haarcascade_frontalface_default.xml'  # PATH OF THE CASCADE
#path = 'haarcascades/haarcascade_smile.xml'  # PATH OF THE CASCAD 
objectName = 'Azuolas'       # OBJECT NAME TO DISPLAY
frameWidth= 640                     # DISPLAY WIDTH
frameHeight = 480                  # DISPLAY HEIGHT
color= (255,0,255)
#################################################################


cap = cv2.VideoCapture(0)
cap.set(3, frameWidth)
cap.set(4, frameHeight)

def empty(a):
    pass

# CREATE TRACKBAR
cv2.namedWindow("Result")
cv2.resizeWindow("Result",frameWidth,frameHeight+100)
cv2.createTrackbar("Scale","Result",400,1000,empty)
cv2.createTrackbar("Neig","Result",8,50,empty)
cv2.createTrackbar("Min Area","Result",0,100000,empty)
cv2.createTrackbar("Brightness","Result",180,255,empty)

# LOAD THE CLASSIFIERS DOWNLOADED
cascade = cv2.CascadeClassifier(path)

while True:

    # SET CAMERA BRIGHTNESS FROM TRACKBAR VALUE
    cameraBrightness = cv2.getTrackbarPos("Brightness", "Result")
    cap.set(10, cameraBrightness)
    # GET CAMERA IMAGE AND CONVERT TO GRAYSCALE
    success, img = cap.read()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # DETECT THE OBJECT USING THE CASCADE
    scaleVal =1 + (cv2.getTrackbarPos("Scale", "Result") /1000)
    neig=cv2.getTrackbarPos("Neig", "Result")
    objects = cascade.detectMultiScale(gray,scaleVal, neig)
    # DISPLAY THE DETECTED OBJECTS
    for (x,y,w,h) in objects:
        print(objectName ,"is in my fov")
        area = w*h
        minArea = cv2.getTrackbarPos("Min Area", "Result")
        if area >minArea:
            cv2.rectangle(img,(x,y),(x+w,y+h),color,3)
            cv2.putText(img,objectName,(x,y-5),cv2.FONT_HERSHEY_COMPLEX_SMALL,1,color,2)
            roi_color = img[y:y+h, x:x+w]

    cv2.imshow("Result", img)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break 

提前致谢!!!!

【问题讨论】:

  • 发布您的输入图片。
  • 您已经在使用img,这是彩色图像。究竟是什么问题?

标签: python opencv


【解决方案1】:

我对 cv2 很熟悉,但已经好几年没用过了,所以在这里请多多包涵。我认为您的意思是,当您调用cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 时,它会将原始img 覆盖为灰度,即使您已将其分配给变量gray

在转换为灰度之前,您可能需要copy the imageClone an image in cv2 python

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

【讨论】:

  • 这个.copy() 不是必需的。 OP 的源代码不会覆盖源图像。
猜你喜欢
  • 2013-05-05
  • 2021-12-25
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多