入过的opencv大坑

Mat的类型

最新做项目,要将数组中的数字写入到opencv的Mat中保存成图像。想要单通道的图像,那就申请一个Mat类型的数组,然后往里面赋值就好了。

Mat mat_=Mat::zeros(Size(width,height),CV_8UC1);
for(int i=0;i<height;i++)
    for(int j=0;j<width;j++)
    {
        mat_<int>(i,j)=value;
    }

本以为这样就好了,但是一直得不到正确的图像。反复看程序没有发现错误,后来,终于发现就是赋值这里错了。应该是下面这种写法:

Mat mat_=Mat::zeros(Size(width,height),CV_8UC1);
for(int i=0;i<height;i++)
    for(int j=0;j<width;j++)
    {
        mat_<uchar>(i,j)=value;
    }

在给三通道图像赋值的时候,

mat_.at<Vec3b>(i,j)[0]=value;
mat_.at<Vec3b>(i,j)[1]=value;
mat_.at<Vec3b>(i,j)[2]=value;

opencv读取图像

opencv读取图像使用imread函数。

image=imread("img_path");

不管是单通道图像还是双通道图像,这样读进来都是三通道图像。要想读进来还是单通道,要这样使用:

image=imread("img_path",-1)

保存图片

opencv保存图片的函数是imwrite()。

imwrite("image.jpg",image);

对于JPEG格式的图片,这个参数表示从0-100的图片质量(CV_IMWRITE_JPEG_QUALITY),默认值是95.
对于PNG格式的图片,这个参数表示压缩级别(CV_IMWRITE_PNG_COMPRESSION)从0-9.较高的值意味着更小的尺寸和更长的压缩时间而默认值是3.
对于PPM,PGM或PBM格式的图片,这个参数表示一个二进制格式标志(CV_IMWRITE_PXM_BINARY),取值为0或1,而默认值为1.
可以改变其质量因子,

vector<int>compression_params;    
compression_params.push_back(CV_IMWRITE_JPEG_QUALITY); //JPG格式图片的压缩级别    
compression_params.push_back(100);    
    try    
    {    
        imwrite("image.JPG", image, compression_params);    
    }    

但是如果想要无损失,还是保存成PNG好了,因为这个是无损压缩。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值