因此,我试图检测图像中的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))