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

Posted Cassiel_cx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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_<bit_depth>(S|U|F)C<number_of_channels>

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

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

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

以上是关于OpenCV中的图像数据格式CV_8U定义的主要内容,如果未能解决你的问题,请参考以下文章

opencv python 如何将float 转换成 CV_8U

如何将IplImage转换为GLubyte数组?

OpenCV 保存 CV_32FC1 图像

OpenCV中的saturate操作(饱和操作)究竟是怎么回事

opencv报错——(mtype == CV_8U || mtype == CV_8S)

opencv报错——(mtype == CV_8U || mtype == CV_8S)