1、图像处理

	//构建一个5*5的三通道二维矩阵;每个矩阵中元素包含三个值,每个值类型为double
	cv::Mat test_mat = cv::Mat(5,5,CV_64FC3);
    for (int h = 0; h < test_mat.rows; h++) {
        for (int w = 0; w < test_mat.cols; w++) {
            test_mat.at<cv::Vec3d>(h, w)[0] = 100 + h * 100 + w + 1;
            test_mat.at<cv::Vec3d>(h, w)[1] = 100 + h * 100 + w + 2;
            test_mat.at<cv::Vec3d>(h, w)[2] = 100 + h * 100 + w + 3;
        }
    }
	//访问矩阵中第一个元素(0,0),该元素有三个double类型组成
    std::cout << test_mat.at<cv::Vec3d>(0,0) << std::endl;
    //访问矩阵中第一个元素(0,0)的第一个通道,返回一个double值
	std::cout << test_mat.at<cv::Vec3d>(0, 0)[1] << std::endl;

	//设定元素类型为double对第一个元素(0,0)进行访问,返回该元素第一个通道值
    std::cout << test_mat.at<double>(0,0) << std::endl;
    //设定元素类型为double对元素(2,2)进行访问,返回该元素第一个通道值
    std::cout << test_mat.at<double>(2,2) << std::endl;
    
    std::cout << test_mat << std::endl;

opencv中mat的访问存储方式和访问方法:

mat创建时可以确定内部元素的类型和通道数;

mat中的元素存放是先行后列形式,即先把一行中的全部元素保存后再保存下一行;当mat是单通道时则每一个元素就只是一个基本类型元素,例如double;当mat是多通道时,则每一个元素就是一个单行多列容器,例如当mat是RGB图片时,通道数为三,每一个元素是三个基本数据类型char组成的1*3大小的容器;

mat在内存中的实际存放方式是,先存放第一行元素,如果是多通道,则会把同一位置中的所有通道数据全部连续存放完毕,再存放下一个位置的全部通道元素;

上述代码运行结果:

cv::mat的连续性问题:

OpenCV isContinuous()连续存储的问题_pan_jinquan的博客-CSDN博客_mat.iscontinuous

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值