Opencv2系列学习笔记2(图像的遍历)

图像遍历主要有三种方法,本节主要介绍和比较这三种方法。

一:简单存取像素值

       首先介绍一个名词—椒盐噪点:它是一种特殊的噪点,它随机的将图像中的部分像素设置为白色或者黑色。

Code:

#include <opencv2\highgui\highgui.hpp>
#include <opencv2\imgproc\imgproc.hpp>
#include <opencv2\core\core.hpp>
#include <iostream>

using namespace std;
using namespace cv;

void salt(Mat &image, int n)
{
	for(int k = 0; k < n; k++)
	{
		rand();
		int i = rand() % image.cols;
		int j = rand() % image.rows;
		if(image.channels() == 1)
		{
			image.at<uchar>(j,i) = 255;
		}
		else if(image.channels() == 3)
		{
			image.at<Vec3b>(j,i)[0] = 255;
			image.at<Vec3b>(j,i)[1] = 255;
			image.at<Vec3b>(j,i)[2] = 255;
		}
	}
}
void salt2(Mat_<Vec3b> image, int n)    // 这个只针对彩色三通道的图片
{
	for(int k = 0; k < n; k++)
	{
		rand();
		int i = rand() % image.cols;
		int j = rand() % image.rows;
		if(image.channels() == 3)
		{
			image(j,i)[0] = 255;
			image(j,i)[1] = 255;
			image(j,i)[2] = 255;

		}
	}
}
int main()
{
	Mat image = imread("F:\\huangrong.jpg", 1);
	salt(image, 3000);
	namedWindow("image");
	imshow("image", image);
	waitKey(0);
	return 0;

}

Explaination:

(1)  rand()是随机数生成函数。

(2)image.at<Vec3b>(j,i)[0] = 255;

成员函数at(inty, int x)可以用来存取图像元素,但必须在编译时期知道它的数据类型,这样的函数被称为模板函数,即需要指定操作成员的类型at<uchar>(y,x)

Opencv 中的类型Vec3b是由三个uchar组成的向量,可以通过操作符[]来获取。

(3)Mat_<Vec3b> image; image(j,i)[0] =255;

Mat_是Mat的一个模板子类。在事先知道矩阵类型的情况下,使用Mat_可以带来一些便利。这个类定义了一些额外的成员方法,但没有定义成员变量。它重载了操作符(),允许我们可以通过它直接存取矩阵元素。

Resu

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值