2017-11-25 195 views
0

我试图使用图像编辑器(如MS绘画或paint.net)绘制具有固定颜色的边界框(如纯红色与RGB = 255 ,0,0),然后通过查找具有此RGB值(或BGR值为0,0,255)的像素,然后在python中加载图像(例如opencv imread),以便我可以创建用于对象检测目的的标签。imwrite和/或imread在python opencv后的图像像素值

但是,保存并加载图像后,我看不到具有此类RGB或BGR值的任何像素。相反,这些像素是在一个值范围内,这可能与我指定的范围很远。

我还试图用这样的事情对于实验目的:

cv2.rectangle(img_arr, (10, 10), (60, 60), (0, 0, 255), thickness=1) 

这一说法后,我确实看到像素,值(0,0,255)。然而,当我运行cv2.imwrite然后cv2.imread这样的:

cv2.imwrite(full_path_name, img_arr) 

及更高版本:

img_arr = cv2.imread(full_path_name) 

我在这个新的img_arr注意到,有一个与这些BGR没有任何的像素值的任何更多。问题是什么?

回到原始问题的标签图像的对象检测,我不想使用任何工具进行标签,因为他们大多数是检测鼠标的运动,但是,我的任务是检测文本区域,这需要非常精确的边界框,以便后期的图像分割和字符识别不会太困难。因此,我更喜欢静态方式,以便可以调整边界框以便准确,甚至可以进行检查。当他们是最后的时候,我们创建标签。这个想法甚至会起作用吗?

非常感谢!

+5

可能你使用的JPEG是有损的。尝试使用PNG。 –

+0

遵循@MarkSetchell的建议。尝试使用阈值来制作分割颜色库,可能是红色值大约为255,但不是纯粹的255 ... https://opencv-srf.blogspot.com.au/2010/09/object-detection-using -color-seperation.html – crodriguezo

+0

@crodriguezo谢谢你的回答。 –

回答

1

使用JPEG作为图像处理任务的中间存储器时要小心,因为它是有损格式,并且随后读取它们时可能会有所不同。

考虑使用中间存储的无损PNG格式。或者使用NetPBM PGM(灰度)或PPM(彩色)格式来读取和写入特别简单的格式 - 但请注意,它不能保留元数据(如版权或EXIF数据)。

相关问题