OpenCV中的图像数据格式CV_8U定义

今天在对 16 位的深度图提取 HOG 特征时,遇到了以下问题:

代码如下:

import cv2
import numpy as np

reff_image = cv2.imread(os.path.join('C:/Users/DELL/Desktop/imgs', image_dir[j]), -1)
img_gradx = cv2.convertScaleAbs(cv2.Sobel(reff_image,cv2.CV_16S,1,0))
img_grady = cv2.convertScaleAbs(cv2.Sobel(reff_image,cv2.CV_16S,0,1))
reff_image = cv2.addWeighted(img_gradx,0.5,img_grady,0.5,0)
cell_size = (6, 6)
num_cells_per_block = (2, 2)
block_size = (num_cells_per_block[0] * cell_size[0], num_cells_per_block[1] * cell_size[1])
x_cells = reff_image.shape[1] // cell_size[0]
y_cells = reff_image.shape[0] // cell_size[1]
h_stride = 1
v_stride = 1
block_stride = (cell_size[0] * h_stride, cell_size[1] * v_stride)
num_bins = 9
win_size = (x_cells * cell_size[0] , y_cells * cell_size[1])
hog = cv2.HOGDescriptor(win_size, block_size, block_stride, cell_size, num_bins)
hog_descriptor_reff = hog.compute(reff_image)

Error 如下:

问题出在读取图片的格式不对,图片的数据类型如下:

in:print(reff_image.dtype)
out:uint16

显然不满足 CV_8U || CV_8UC3 的要求,将图像的数据类型改成 uint8 后,便可解决此问题。

reff_image = reff_image.astype(np.uint8)

问题解决后,查阅官方文档并做如下记录:

OpenCV 中的 img.type() 格式如下:

CV_(S|U|F)C

1、bit_depth:比特数,有代表 8bite\16bite\32bite\64bite;

2、S|U|F:S 表示有符号整型 (signed int),U 表示无符号整型 (unsigned int),F 表示单精度浮点型 (float);

3、:代表所存储的图片的通道数。1 为单通道图像 (灰度图),3 为 RGB 图像。

你可能感兴趣的:(python,opencv,计算机视觉,人工智能)