在python opencv中imwrite和/或imread之后的图像像素值

时间:2017-11-25 13:49:22

标签: python opencv image-processing object-detection

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

但是,保存并加载图像后,我看不到任何具有此类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值的像素。有什么问题?

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

非常感谢!

1 个答案:

答案 0 :(得分:1)

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

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