opencv图像读取和cv::Mat

1、在opencv的C++ API中,所有的类和函数都在命名空间cv内定义,可以使用

using namespace cv;

或者是加上前缀 cv::

2、imread读入图像
生成的图像由无符号(unsigned char)构成(OpenCV中为CV_8U)

image=cv::imread("puppy.bmp",CV_LOAD_IAMGE_COLOR);  //读取一个图像文件,并转换为三通道彩色图像,每个像素有3个字节(CV_8U3C)

使用image.channels()可以获得图像的通道数;
当用imread打开路径制定不完整的图像时,imread会自动打开默认目录。如果从控制台运行程序,默认目录就是可执行文件所在的目录,如果从IDE中运行程序,为项目文件所在的目录。

3、imshow显示图像
imshow显示的图像是由整数(CV_16U表示16为无符号整数,CV_32S表示32为有符号整数)构成,图像每个像素的值会被除以256,以便能够在256级灰度中显示。在显示由浮点数构成的图像时,值的范围会被假设为0.0(黑色)到1.0(白色)之间,大于1.0显示白色,小于0.0显示黑色。

4、cv::Mat
(1)cv::Mat 由一个头部和一个数据块组成,头部包含了矩阵的相关信息(大小,通道数,数据类型等),数据块包含了图像中所有像素的值。头部有一个指向数据块的指针,即data属性。

cv::Mat(240,320,CV_8U,100);  //创建一个240x320的图像,每个像素对应一个字节

(2)cv::Scalar,用于在调用函数时传递像素值。

cv::Mat image(240,320,CV_8UC3,cv::Scalar(100));  //创建一个红色图像,通道顺序为BGR

(3)cv::Size,包含了矩阵的高度和宽度

cv::Mat image(cv::Size(320,240),CV_8UC3);//创建一个未初始化的彩色图像。

可以使用create方法分配或重新分配图像的数据块,如果图像已经分配,其原来的内容会被释放。

iamge.create(200,200,CV_8U);

(4)cv::Mat 的at(x,y)可以访问元素,在编译时必须明确方法返回值的的类型。
如:

image.at<uchar>(j,i)=255;

彩色图像的每个像素对应三个部分:红色,绿色,蓝色。包含彩色图像的cv::Mat返回一个向量,向量中包含三个8为的数值,访问彩色图像的方法:

image.at<cv::Vec3b>(j,i)[channel]=value;

(5)cv::Mat 的ptr方法可以直接访问图像中一个行的地址。
如:

 uchar* data=image.ptr<uchar>(j);

(6)cv::Mat的isContinuous方法可以判断出图像有没有被填充,如果图像没有被填充,它就返回true.
如:

if(image.isContinuous())
{
   //没有填充像素
   image.reshape(1,1);//设置新的通道数为1,新的行数为1
}
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值