3 OpenCV 像素操作

首页



cv::Mat储存的数据类型

数据类型 具体类型 取值范围 type()
CV_8U 8位无符号整数 0~255 16
CV_8S 8位符号整数 -128~127 17
CV_16U 16位无符号整数 0~65535 18
CV_16S 16位符号整数 -32768~32767 19
CV_32S 32位符号整数 -2147483648~2147483647 20
CV_32F 32位浮点整数 -FLT_MAX~FLT_MAX,INF,NAN 21
CV_64F 64位浮点整数 -DBL_MAX~DBL_MAX,INF,NAN 22

Mat类矩阵常用属性

属性 作用
cols 矩阵的列数
rows 矩阵的行数
step 以字节为单位的矩阵的有效宽度
elemSize() 每个元素的字节数
total() 矩阵中元素的个数
channels() 矩阵的通道数
type() 数据类型

Mat 构造

// 默认构造
cv::Mat::Mat();
// 利用矩阵尺寸和类型参数构造Mat类
cv::Mat::Mat(int rows, int cols, int type);
// 用Size()构造Mat类
cv::Mat::Mat(Size size(), int type);
// 利用已有矩阵构造Mat类
cv::Mat::Mat(const Mat &m);
// 构造已有Mat类的子类
cv::Mat::Mat(const Mat &m, const Range &roRange, const Range &colRange = Range::all())
// 在构造时赋值
cv::Mat::Mat(int rows, int cols, int type, const Scalar &s);
// 枚举赋值示例
cv::Mat a = (cv::Mat_<int>(3, 3) << 1, 2, 3, 4, 5, 6, 7, 8, 9);
// 构建一个单位矩阵
cv::Mat::eye(int rows, int cols, int type);
// 构建对角矩阵,参数必须为Mat类型的一维变量,用来存放对角元素的数值
cv::Mat::diag()
// 构建一个全为 1 的矩阵,参数同 eye()
cv::Mat::ones()
// 构建一个全为 0 的矩阵,参数同 eye()
cv::Mat::zeros()




矩阵

/**
 * @author IYATT-yx
 * @date 2021/2/2
 * @brief 矩阵运算 - <<线性代数>>
 */
#include "opencv2/opencv.hpp"

int main()
{
   
    // 矩阵乘法
    // 第一个矩阵的列数必须和第二个矩阵的行数相等
    // Mat中的数据类型必须是 CV_32FC1 CV_64FC1 CV_32FC2 CV_64FC2 四个中的一种, 即保存的数据必须为 float 或 double
    cv::Mat matrix1 = (cv::Mat_<double>(3, 3) << 1, 2, 3, 3, 2, 1, 2, 2, 2);
    cv::Mat matrix2 = (cv::Mat_<double>(3, 3) << 5, 6, 3, 2, 1, 1, 3, 2, 5);
    std::cout << "matrix1 = \n" << matrix1 << std::endl;
    std::cout << "matrix2 = \n" << matrix2 << "\n" << std::endl;
    std::cout << "matrix1 × matrix2 =\n" << matrix1 * matrix2 << "\n" << std::endl;
    //  1 2 3       5 6 3       1x5+2x2+3x3 1x6+2x1+3x2 1x3+2x1+3x5         18 14 20
    //  3 2 1   ×   2 1 1   =   3x5+2x2+1x3 3x6+2x1+1x2 3x3+2x1+1x5    =    22 22 16
    //  2 2 2       3 2 5       2x5+2x2+2x3 2x6+2x1+2x2 2x3+2x1+2x5         20 18 18
    std::cout << "matrix1 ÷ matrix2 =\n" << matrix1 / matrix2 << std::endl;
    // matrix1 ÷ matrix2 = matrix1 × matrix2^(-1) 即 matrix1 乘以 matrix2的逆矩阵
    std::cout << "____________________________________________________________" << std::endl;

    // 矩阵加法和减法
    // 要求两个矩阵大小相同
    // 对应位置相加减
    std::cout << "matrix1 + matrix2 =\n" << matrix1 + matrix2 << std::endl;
    std::cout << "matrix1 - matrix2 =\n" << matrix1 - matrix2 << "\n" << std::endl;
    std::cout << "____________________________________________________________" << std::endl;
    
    // 矩阵内积
    // matrix1三个向量(列): (1, 3, 2) (2, 2, 2) (3, 1, 2)
    // matrix2三个向量(列): (5, 2, 3) (6, 1, 2) (3, 1, 5)
    // 计算数量积的和: 1x5+3x2+2x3 + 2x6+2x1+2x2 + 3x3+1x1+2x5 = 55
    std::cout << matrix1.dot(matrix2) << "\n" << std::endl;
    std::cout << "____________________________________________________________" 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本程序主要对遥感图像实现三种处理:几何校正、图像增强和图像配准。这三种处理都可以独立实现,然而对于原始的遥感图像将这三种处理依次进行效果更佳。 具体操作步骤如下: 1.在主窗口打开图像1 2.选择【几何校正】菜单,打开【图像几何校正】对话框进行几何校正。在此对话框中,首先打开待校正图像2,然后点击【选取特正点】按钮,按照提示依次在待校正图像和基准图像中手动选取特征点,最后点击【校正图像】得到几何校正结果,如果达到预期效果,则点击【保存并在主窗口打开】按钮,保存此校正图片,并在主窗口打开。 3.选择【图像增强】菜单,打开【图像增强】对话框进行图像增强。在此对话框中,首先在相应的处理类别(如:直方图增强、灰度增强等)中选择具体方法(如:均衡化、规定化等),然后点击本类别的按钮。增强后的结果会在右侧显示,如果达到预期效果,则点击【保存并在主窗口打开】按钮,保存此增强后的图片,并在主窗口打开。 4.选择【图像配准】菜单,打开【图像配准】对话框进行图像配准。在此对话框中,首先打开待匹配图像3,然后选择“半自动”或“手动”方法并点击【选取特正点】按钮,按照提示依次在待配准图像和基准图像中半自动或手动选取特征点(如果在半自动选取中特征点对应错误,可以更改特征点),最后点击【匹配图像】得到图像配准结果,如果达到预期效果,则点击【保存并在主窗口打开】按钮,保存此校正图片,并在主窗口打开。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值