在opencv python中将图像颜色从float32类型转换为uint8类型后如何恢复图像颜色?

时间:2019-11-21 14:22:16

标签: python opencv image-processing

因此,我试图检测图像中的aruco标记,并且该功能要求图像为uint8类型,所以我使用以下公式转换了图像:

IMG = ((img.astype(np.uint8)*255)) #img is the original float32 type image

这是图像,类型为float32: Image

将其转换为uint8类型,然后将其传递给需要使用uint8类型图像的功能 ,然后我得到了:Image uint8

我将图像传递给的函数是:

def detect_Aruco(img):  #returns the detected aruco list dictionary with id: corners
    aruco_list = {}
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    aruco_dict = aruco.Dictionary_get(aruco.DICT_5X5_50)
    parameters = aruco.DetectorParameters_create()
    #lists of ids and the corners belonging to each id
    corners, ids, _ = aruco.detectMarkers(gray, aruco_dict, parameters = parameters)
    # print len(corners), corners, ids
    gray = aruco.drawDetectedMarkers(gray, corners,ids)
    # cv2.imshow('frame',gray)
    #print (type(corners[0]))
    if len(corners):    #returns no of arucos
        #print (len(corners))
        #print (len(ids))
        for k in range(len(corners)):
            temp_1 = corners[k]
            temp_1 = temp_1[0]
            temp_2 = ids[k]
            temp_2 = temp_2[0]
            aruco_list[temp_2] = temp_1
        return aruco_list

TLDR;我想获取Image2,但要具有原始颜色。有帮助吗?

编辑:这是我的原始图像数组(在float32中):Image as float array

编辑2:我想我明白了。 为了增加对比度,我将其乘以3。该值大于1。因此规范化是错误的。

正如评论所建议的,正确的行是:ENHAN_IMG = ((enhan_img*255).astype(np.uint8))

0 个答案:

没有答案