openCV2.0中对于Mat中存在负值的时…

本文介绍如何在OpenCV中处理包含负值的Mat对象,并通过assignTo或convertTo函数将其转换为适合显示的形式。文中提供了具体的代码示例,并验证了convertTo函数在不同情况下的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天,偶然遇到了一个问题,有一些Mat经过操作后,会形成负值,我遇到的问题是:怎么修改这些负值,也就是怎么对其进行操作???

如果用以前对像素的操作办法进行操作,是不行的,因为以前一直用的是uchar类型的,这种类型的范围是0--255,不可能对负值形成操作,经过一番尝试,可以用两个函数解决这个问题,分别是assighTo或者convertTo这两个函数都可以解决这个问题。

代码如下:
Mat  (Mat_(3,3)  <<  0,  -2,  0,  -126,  5,  -7,  245,  -3,  106);  //创建一个含有负值的Mat
Mat  dst(3,3,CV_8UC1);//用来接收转换后的数据的Mat,注意第三个参数
//C.convertTo(dst,dst.type());//转换函数
C.assignTo(dst,dst.depth());//同上,转换函数
//cout<<dst<<"  ";
for(int  y=0;  y
 
  uchar  *data  dst.ptr(y);//办法1
for(int  x=0;  x
 
//printf("%d  ",*(dst.data  dst.cols*y  x));//办法2
//cout  <<  (int)dst.at(y,x)<<  ";//办法3
cout  <<  (int)*(data  x)<<  ";//办法1

NOTE:   在OpenCV中,cv::Mat类提供了一个名为converTo的方法来进行矩阵类型转换。当然使用时需要注意的是,该函数只能进行矩阵深度类型的转换,而不能进行矩阵通道数的转换。若需要进行矩阵通道数的转换,可能需要采取进行其他的方法来变通实现,
验证代码如下:

  1.    
  2.     cv::Mat matOrigin( 10, 10, CV_32FC3, cv::Scalar(10) );  
  3.   
  4.       
  5.     cv::Mat mat8UC3Converted;  
  6.     matOrigin.convertTo( mat8UC3Converted, CV_8UC3, 1, );  
  7.   
  8.     if CV_8UC3 == mat8UC3Converted.type()  
  9.      
  10.         std::cout << "mat8UC3Converted 转换成功。" << std::endl;  
  11.      
  12.     else  
  13.      
  14.         std::cout << "mat8UC3Converted 转换失败。" << std::endl;  
  15.      
  16.   
  17.       
  18.     cv::Mat mat8UC1Converted;  
  19.     matOrigin.convertTo( mat8UC1Converted, CV_8UC1, 1, );  
  20.   
  21.     if CV_8UC1 == mat8UC1Converted.type()  
  22.      
  23.         std::cout << "mat8UC1Converted 转换成功。" << std::endl;  
  24.      
  25.     else  
  26.      
  27.         std::cout << "mat8UC1Converted 转换失败。" << std::endl;  
  28.      
  29.   
  30.     system( "pause" );  
  31.   
  32.     return 0;  
  33. }  

openCV2.0中对于Mat中存在负值的时候的对于像素的读取和修改 openCV2.0中对于Mat中存在负值的时候的对于像素的读取和修改

openCV2.0中对于Mat中存在负值的时候的对于像素的读取和修改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值