关于OpenCV中利用函数cvConvert实现图像数据类型转换(8U->16S)

  最近在做毕设,关于矩形NAM表示方法的。刚刚接触opencv,一些函数用得比较生疏。
  解决灰度图像RNAM算法时要标记已编码的矩形范围,我的方法是将其标记为-1,即处理完一个矩形,即用cvSubS(v+1) “v表示原像素值”将矩形框中的像素减到-1。但由于直接读入的图像数据均为8位无符号整型,所以需将其转换为16位有符号整型,这样才能表示负数。
  利用以下代码直接用函数cvConvert将原图像格式由8位无符号整型转换为16位有符号整型时,发现转换后的图像矩阵按照原来输出图像矩阵数据的方法输出的数据与源图像不一样。
   
IplImage* img = cvLoadImage(argv[1], 0);
IplImage* image = cvCreateImage(cvSize(img->width, img->height), IPL_DEPTH_16S, 1);
cvConvertScale(img, image);


for (int y = 0; y < image->height; ++y)
{
uchar* ptr = (uchar*)(image->imageData + y*image->widthStep);
for (int x =0; x < image->width; ++x)
{
cout << int(ptr[x]) << '\t';
// cout << bitset<16>(ptr[x]) << '\t';
}
cout << endl;
}

  后将"uchar* ptr = (uchar*)(image->imageData + y*image->widthStep);"中的uchar(8位)改为short int(16位)后数据正确。与ptr的类型有关。

  以后遇到类似问题要考虑到存储数据的类型所占的位数问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值