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
Python Opencv(Opencv contrib)在使用对象检测模块(cv2.dnn.readNet)后正在更改图像的颜色_Python_Opencv_Image Processing_Deep Learning_Computer Vision - Fatal编程技术网

Python Opencv(Opencv contrib)在使用对象检测模块(cv2.dnn.readNet)后正在更改图像的颜色

Python Opencv(Opencv contrib)在使用对象检测模块(cv2.dnn.readNet)后正在更改图像的颜色,python,opencv,image-processing,deep-learning,computer-vision,Python,Opencv,Image Processing,Deep Learning,Computer Vision,我训练了一个YoloV4模型并使用了opencv contrib,因为opencv还不支持YoloV4。您可以将其与yolov3一起使用。代码有两个问题: 当使用cv2.imshow查看最终图像时,它将traingle定位为黄色而不是蓝色。我需要提取那个三角形并传递给其他网络,这样我就不能使用黄色图像 它只给出结果,并且仅当我们使用scale=1/255时才给出结果。否则,它会给出糟糕的结果。为什么呢 我想问为什么它会改变颜色,我怎样才能防止它?我知道它对应于opencv的BGR格式,但如何解决

我训练了一个YoloV4模型并使用了
opencv contrib
,因为
opencv
还不支持
YoloV4
。您可以将其与yolov3一起使用。代码有两个问题:

  • 当使用
    cv2.imshow
    查看最终图像时,它将traingle定位为黄色而不是蓝色。我需要提取那个三角形并传递给其他网络,这样我就不能使用黄色图像
  • 它只给出结果,并且仅当我们使用
    scale=1/255时才给出结果。
    否则,它会给出糟糕的结果。为什么呢
  • 我想问为什么它会改变颜色,我怎样才能防止它?我知道它对应于
    opencv
    BGR
    格式,但如何解决它呢

    import requests
    import numpy as np 
    from PIL import Image
    from io import BytesIO
    import cv2
    
    
    CONFIDENCE_THRESHOLD = 0.5
    NMS_THRESHOLD = 0.5
    COLORS = [(0, 255, 255), (255, 255, 0), (0, 255, 0), (255, 0, 0)]
    
    net = cv2.dnn.readNet("./yolov4-obj_best_1_class.weights", "./yolov4-custom_1_class.cfg")
    model = cv2.dnn_DetectionModel(net)
    model.setInputParams(size=(416, 416),scale=1/255.)
    
    
    url = 'https://instasolv1.s3.ap-south-1.amazonaws.com/QuestionBank/5e9ad4b1e1c473f2bce0e4ff/crop_image.png' # Check original image 
    response = requests.get(url)
    
    img = Image.open(BytesIO(response.content))
    classes, scores, boxes = model.detect(img_array, CONFIDENCE_THRESHOLD, NMS_THRESHOLD)
    
    
    box = boxes[0]
    
    (x, y) = (box[0], box[1])
    (w, h) = (box[2], box[3])
    
    cv2.rectangle(img_array, (x, y), (x + w, y + h), (0,255,0), 2)
    text = "Text"
    cv2.putText(img_array, text, (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX,
        0.5, (255,0,255), 2)
    
    cv2.imshow("Show",img_array) # given result has yellow triangle
    cv2.waitKey()  
    cv2.destroyAllWindows()
    
    

    运行以下代码:

    import requests
    import numpy as np
    from PIL import Image
    from io import BytesIO
    import cv2
    
    
    CONFIDENCE_THRESHOLD = 0.5
    NMS_THRESHOLD = 0.5
    COLORS = [(0, 255, 255), (255, 255, 0), (0, 255, 0), (255, 0, 0)]
    
    #net = cv2.dnn.readNet("./yolov4-obj_best_1_class.weights", "./yolov4-custom_1_class.cfg")
    #model = cv2.dnn_DetectionModel(net)
    #model.setInputParams(size=(416, 416),scale=1/255.)
    
    
    #url = 'https://instasolv1.s3.ap-south-1.amazonaws.com/QuestionBank/5e9ad4b1e1c473f2bce0e4ff/crop_image.png' # Check original image
    #response = requests.get(url)
    
    #img = Image.open(BytesIO(response.content))
    img=Image.open('RGBY_example.png')
    #classes, scores, boxes = model.detect(img_array, CONFIDENCE_THRESHOLD, NMS_THRESHOLD)
    img_array_original=np.array(img)
    
    img_array=img_array_original
    #img_array=cv2.cvtColor(img_array_original,cv2.COLOR_BGR2RGB)
    
    #box = boxes[0]
    box=[100,100,50,60]
    
    (x, y) = (box[0], box[1])
    (w, h) = (box[2], box[3])
    
    
    
    cv2.rectangle(img_array, (x, y), (x + w, y + h), (0,255,0), 2)
    text = "Text"
    cv2.putText(img_array, text, (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX,
        0.5, (255,0,255), 2)
    
    cv2.imshow("Show",img_array) # given result has yellow triangle
    cv2.waitKey()
    cv2.destroyAllWindows()
    
    …你会得到不稳定的颜色:

    …因此

    要解决此问题,请从第26行中删除#:

    …您将看到正确的颜色。通过这种方式,您可以看到这个想法,并且可以在将来处理图像中的任何颜色空间。

    回答问题n:o 2“它仅给出结果,并且仅当我们使用比例=1/255时才给出结果。否则,它会提供糟糕的结果。这是为什么?”


    DNN输入所需的输入刻度为0到1。在RGB图像中,每个像素颜色值介于0和255之间。因此,为了预处理DNN的图像,每个像素值乘以1/225。

    img
    是RGB顺序的,因为它是使用枕头加载的。因此,
    img_数组
    只是在
    cv2.imshow
    窗口中“错误地”显示。这只是一个可视化的东西。如果您进一步处理
    img_数组
    ,例如馈送到其他网络,您仍然拥有RGB有序图像。如果你想有一个适当的RGB预览,考虑使用<代码> imSeS/<代码>从<代码> MatPultLIB。我就是这么想的,只使用Numpy裁剪图像,并将结果传递给用户。非常感谢。示例图像RGB_example.png可以从