【OpenCV:从零到一】02:矩阵的掩膜操作

前言
这是我《OpenCV:从零到一》专栏的第二篇博客,想看跟多请戳
本文概要
CV_Assert()
saturate_cast()
filter2D()
Mat对象的rows,cols,channels,depth(),copyTo(),ptr()
getTickCount() getTickFrequency()
图像的遍历

掩膜(mask也称为kennel),在数字图像处理中对应的就是模板运算,是处理图像常用的运算。说白了就是将某个像素的附近的像素的灰度值进行加权运算得到的值再赋给这个像素。实现方法有两种:1.两层循环遍历 2.调用函数
在这里插入图片描述
案例代码
大概内容:两种矩阵的掩膜操作。计时操作

#include<opencv2/opencv.hpp>//包含了大多数头文件
#include<opencv2/highgui/highgui_c.h>
#include<iostream>

using namespace cv;
//main的参数可填可不填,主要用于命令行执行函数的时候输入
int main(int argc, char** argv) {
   
   
	String pic_url = "D:\\86186\\Documents\\opencv\\lena.jpg";
	Mat myImage = imread(pic_url);
	CV_Assert(myImage.depth() == CV_8U);//宏 判断语句是否正确,错误抛出异常,判断图片是否为8bit无符号类型
	namedWindow("LENA", CV_WINDOW_AUTOSIZE);//CV_WINDOW_AUTOSIZE要#include<opencv2/highgui/highgui_c.h>
	imshow("LENA", myImage);


	//方法一:
	Mat resultImage;
	myImage.copyTo(resultImage);//函数本身作用是复制,这里主要是为了给resultImage分配空间
	int nchannels = myImage.channels();//Returns the number of matrix channels.返回矩阵通道数
	int height = myImage.rows;//Mat的属性,像素矩阵的行数
	int cols = myImage.cols;//Mat的属性,像素矩阵的列数
	int width = myImage.cols * nchannels;//可以认为一个像素是由一个一维数组,数组长度为通道数,即实际矩阵长度要乘上矩阵
	double t1 = (double)getTickCount();//获取开始时间信息
	for (int row = 1;row < height - 1;row++) {
   
   
		//myImage.ptr<uchar>(int)是一个函数模板,看到<>应该想到模板,看到()应该想到函数.
		//下面每次循环都会声明这几个变量,在下一次循环之前会被销毁
		const uchar* previous = myImage.ptr<uchar>(row - 1);//返回值是一个一级指针,或者说是一个一维数组
		const uchar* current = myImage.ptr<uchar>(row);
		const uchar*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值