Python Opencv(Opencv contrib)在使用对象检测模块(cv2.dnn.readNet)后正在更改图像的颜色
我训练了一个YoloV4模型并使用了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格式,但如何解决
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可以从