将unsigned short mat转换为opencv中的vector

时间:2015-06-08 10:15:07

标签: c++ opencv vector mat

我使用

在opencv中加载深度图像
cv::Mat depth = cv::imread("blabla.png",CV_LOAD_IMAGE_UNCHANGED);

然后用

获取它的子图像
cv::Mat sub_image= depth(cv::Rect( roi_x,roi_y,roi_size,roi_size)).clone();

现在我想将该sub_image转换为向量

我尝试

std::vector<uchar> array;
array.assign(sub_image.datastart,sub_image.dataend);

在StackOverflow中找到类似问题,但似乎它无法正常工作。

赋值后的数组大小不是roi_size * roi_size, 而是roi_size * roi_size * 2

矢量类型有问题吗?我还尝试了其他各种类型,如double,float,int等

深度图像的类型是无符号短吗??

编辑:

我对深度图像进行标准化时,

数组填充正确(正确大小为roi_size * roi_size)

cv::Mat depthView;
cv::normalize(depth, depthView, 0, 255, cv::NORM_MINMAX,CV_8UC1);

但那不是我想做的事情

3 个答案:

答案 0 :(得分:0)

您对roi_size*roi_size*2的观察是由于深度图片属于short类型,每个尺寸为2 bytes。您正尝试将此图像数据推送到unsigned char类型的数组。

将矢量类型设为short,您会发现数组大小按预期返回roi_size*roi_size。这些价值也是你所期望的。

答案 1 :(得分:0)

您是否尝试过检查您所读取的图像类型,即使用depth.type() == CV_8UC1进行8位uchar和1个频道。

也许你的形象被解读了。 您是否尝试使用标记CV_LOAD_IMAGE_GRAYSCALE而不是CV_LOAD_IMAGE_UNCHANGED来阅读图像?

答案 2 :(得分:0)

感谢所有帮助人员, 我想我设法解决了这个问题。

我将数组赋值的代码更改为此

std::vector<unsigned short> array(sub_image.begin<unsigned short>(),sub_image.end<unsigned short>());

现在大小正确roi_size * roi_size

再次感谢您的帮助。