笔记:OpenCV 【c++】Mat对象

Mat对象OpenCV2.0之后引进的图像数据结构、自动分配内存、不存在内存泄漏的问题,是面向对象的数据结构。分了两个部分,头部与数据部

Mat对象构造函数与常用方法:

第一个:初始一个mat对象并利用Scalar赋值

#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
    Mat src = imread("D:/opencv/2/a.jpg");  //把图像保存到src里
    if (src.empty())
    {
        printf("could not load image...\n");
        return 0;
    }
    namedWindow("input", WINDOW_FREERATIO);
    imshow("input", src);     //imshow 将图片读取出来,“input”为窗口名称

    Mat drt;
    drt = Mat(src.size(), src.type()); //初始了一个mat对象,与src图像的大小和类型相同
    //此时type为空,用下面Scalar,赋值。
    drt = Scalar(127, 0, 255);
    namedWindow("output", WINDOW_FREERATIO);
    imshow("output", drt);

    waitKey(0);
    return 0;
}

效果:

第二个:拷贝图像

    Mat src = imread("D:/opencv/2/a.jpg");  //把图像保存到src里


    Mat drt=src.clone();//完全拷贝一

	Mat drt;
	src.copyTo(drt);//完全拷贝二

第三个:获取通道数(一般彩色为3,灰色为1)

    Mat drt=src.clone();//完全拷贝一
	//方法一
    cout<<src.channels();
	//方法二
    printf("scr的通道数",src.channels());

第四个:得到图像的行和列的数量和用指针得到像素

    //得到图像的行和列的数量
	int cols = src.cols;
	int row = src.rows;
	printf("cols : %d row : %d\n", cols, row);

	//用指针得到像素
	const uchar*fistrow = src.ptr<uchar>(0);
	const uchar* fistrow1 = src.ptr<uchar>(1);
	printf("firstrow : %d ", fistrow);
	printf("firstrow1 : %d ", fistrow1);

第五个:Mat对象创建

Mat M(2,2,CV_8UC3, Scalar(0,0,255))   

 其中前两个参数分别表示行(row)跟列(column)、第三个CV_8UC3中的8表示每个通道占8位、U表示无符号、C表示Char类型、3表示通道数目是3,第四个参数是向量表示初始化每个像素值是多少,向量长度对应通道数目一致

Mat M(100,100,CV_8UC3, Scalar(127, 0, 255));
	imshow("output", M);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值