2021-03-18

opencv快速入门一
1.图片的加载、修改‘保存
(1)加载图像:cv::imread;显示图像:cv::imshow&&cv::namedWindows
————图片的绝对路径,对应的双斜杠
(2)修改图像:cv::cvtColor;
————对应图片的灰度图像与RGB图像之间的转换
(3)保存图像:cv::imwrite;
————8与16位的图片保存
2.矩阵的掩膜操作
图像对比度调整&&重新计算每点的像素值
2.1获取图片的像素指针
(1)CV_Assert(myImage.depth() == CV_8U);//获取图片的像素指针
Mat.ptr(int i=0) 获取像素矩阵的指针,索引i表示第几行,从0开始计行数。ptr是指针意思
(2)saturate_cast 像素范围处理
这个函数的功能是确保RGB值得范围在0~255之间
获得当前行指针const uchar* current= myImage.ptr(row );
获取当前像素点P(row, col)的像素值 p(row, col) =current[col]
像素范围处理saturate_cast
saturate_cast(-100),返回 0。
saturate_cast(288),返回255
saturate_cast(100),返回100
(3)图像的长度和宽度
int cols = image.cols * image.channels();注意通道的个数
2.2掩膜操作
(1)循环手动编写中心元素计算公式
(2)建立掩膜模板filter2D
filter2D(src, dst, src.depth(), kernel); 其中 src 与 dst 是 Mat 类型变量,src.depth() 表示位图深度,有 32、24、8 等。若 src.depth() 赋值为 -1 时,意味着图像深度与原图一致。kernel对应的掩膜模板
3.Mat对象
https://blog.csdn.net/wangyuankl123/article/details/104732460
3.1Mat构造函数
Mat()
Mat(int rows, int cols, int type)
Mat(Size size, int type)
Mat(int rows, int cols, int type, const Scalar &s)
Mat(Size size, int type, const Scalar &s)
Mat(int ndims, const int *sizes, int type)
Mat(int ndims, const int sizes, int type, const Scalar &s)
常见的情况:
void copyTo(Mat mat)//复制Mat矩阵;
Mat clone()//也是克隆
void Mat::convertTo( Mat& m, int rtype, double alpha=1, double beta=0 )//convertTo()函数负责转换数据类型不同的Mat,即可以将类似float型的Mat转换到imwrite()函数能够接受的类型。
参数解释:
m 目标矩阵。如果m的大小与原矩阵不一样,或者数据类型与参数不匹配,那么在函数convertTo内部会先给m重新分配空间。
rtype 指定从原矩阵进行转换后的数据类型,即目标矩阵m的数据类型。当然,矩阵m的通道数应该与原矩阵一样的。如果rtype是负数,那么m矩阵的数据类型应该与原矩阵一样。
alpha 缩放因子。默认值是1。即把原矩阵中的每一个元素都乘以alpha。
beta 增量。默认值是0。即把原矩阵中的每一个元素都乘以alpha,再加上beta。
int channels()
int depth()
bool empty()
uchar
ptr(i=0)
3.2Mat对象的创建
(1)cv::Mat::Mat 构造函数
cv::Mat M(300, 300, CV_8UC3, cv::Scalar(0, 255, 0));//其中前两个参数分别表示行(row)和列(column),第三个参数 **CV_8UC3 中的 8 表示每个通道占 8 位、U 表示无符号、C 表示 char 类型、3 表示通道数目是 3,第四个参数是向量表示初始化每个像素值是多少,**Scalar 中的数目可以小于也可以大于通道数,不足的部分会直接默认为 0,多余的部分直接忽略,scalar(0, 255, 0)=scalar(0, 255)对应的RGB(红绿蓝)
cv::Mat dst1(300, 300, CV_8UC1, cv::Scalar(100));//对应的只有一个通道,所以对应的是灰度图
二值图: 单通道,每个像素点只能是0或255
灰度图:单通道,其实RGB三通道图片每个单独拿出来都是灰度图,每部分的 亮暗代表了该通道在RGB图像中颜色的深浅
(2)创建多维数组 cv::Mat::create
(3)Mat 对象复制//复制只针对于头和指针对于数据不会复制
部分复制:cv::Mat A = cv::imread(imageFile);cv::Mat B(A);
完全复制:cv::Mat dst = image.clone();//完全复制||cv::Mat dst; image.copyTo(dst);
(4)定义小数组
cv::Mat dst1 = (cv::Mat_(2, 2) << 0, -1, 2, 3);–[0 -1;2,3];
(5)初始化零矩阵
cv::Mat dst1 = cv::Mat::zeros(image.size(), image.type());
(6)初始化单位矩阵
cv::Mat dst1 = cv::Mat::eye(3, 3, CV_8UC1);
cv::Scalar(0, 0, 0);对应的是黑色图片
(7)图像的拷贝
Mat clone()
void copyTo(Mat mat)
(8)查看图像的通道数
int channels()//用于图像通道个数的判断

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值