Opencv学习笔记(二)

矩阵的掩膜操作
(一)
获取图像像素指针
Mat.ptr(int i = 0) 获取像素矩阵的指针
Const uchar* current = myImage.ptr(row); 获取当前行指针
(二)
像素范围处理
saturate_cast(数字)
确保RGB值在0~255之间
(三)
在这里插入图片描述
(四)
函数调用filter2D功能
定义掩膜 : Mat kernel = (Mat_(3,3)<<0,-1,0,-1,5,-1,0,-1,0)

filter2D (src,dst,src.depth(),kernel);
Src :原图像
Dst :变化后图像
Src.depth() : 位图深度 有32,24,8等 。 可用-1代替表示和原图一样

(五)
测程序运行时间
double t = getTickCount();
– -----程序--------
double time = (getTickCount() - t) / getTickFrequency();
printf(“Time is %.6f”, time);

(代码部分)

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>

using namespace cv;

int main(int argc, char** argv)
{
	Mat src, dst;
	src = imread("D:/picture/Curry.jpeg");
	if (!src.data)     //如果没有找到图片
	{
		printf("could not find picture.....\n");
		return -1;
	}
	namedWindow("input image", CV_WINDOW_AUTOSIZE);   
	imshow("input image", src); 
	/*
	int cols = (src.cols - 1) * src.channels();
	int offsets = src.channels();
	int rows = src.rows;

	dst = Mat::zeros(src.size(), src.type());   //     初始化dst  和src类型大小一样
	for (int row = 1; row < (rows - 1); row++)
	{
		const uchar* previous = src.ptr<uchar>(row - 1);
		const uchar* current = src.ptr<uchar>(row);
		const uchar* next = src.ptr<uchar>(row + 1);
		uchar* output = dst.ptr<uchar>(row);
		for (int col = offsets; col < cols; col++)
		{
			output[col] = saturate_cast<uchar>(5 * current[col] - (current[col - offsets] + current[col + offsets] + previous[col] + next[col]));
		}
	}
	*/
	double t = getTickCount();
	Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0,
	                               	 -1, 5, -1,
		                              0, -1, 0);
	filter2D(src, dst, src.depth(), kernel);
	double time = (getTickCount() - t) / getTickFrequency();
	printf("Time is %.6f", time);
	namedWindow("output Image", CV_WINDOW_AUTOSIZE);
	imshow("output Image", dst);

	waitKey(0);   //等待
	return 0;
}

没有注释部分为直接用opencv封装库进行掩膜

实验效果
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值