当前位置:首页 > C++ > 正文内容

OpenCV中简单的添加噪声

admin4年前 (2021-06-06)C++15137

随机数生成器用到的是C++11中的新方法。

以下代码来自OpenCV计算机视觉编程攻略第三版2.2.2节

void salt(Mat image, int n)
{
	default_random_engine generator;
	uniform_int_distribution<int> randomRow(0, image.rows - 1);
	uniform_int_distribution<int> randomCol(0, image.cols - 1);
	int i, j;
	for (int k = 0; k < n; k++) 
	{
		//随机生成图形位置
		i = randomCol(generator);
		j = randomRow(generator);
		if (image.type() == CV_8UC1) //灰度图像
		{ 
		    //单通道8位图像
			image.at<uchar>(j, i) = 255;
		}
		else if (image.type() == CV_8UC3) // 彩色图像
		{ 
	        //3通道图像
			image.at<cv::Vec3b>(j, i)[0] = 255;
			image.at<cv::Vec3b>(j, i)[1] = 255;
			image.at<cv::Vec3b>(j, i)[2] = 255;
		}
	}
}

这里传参用的是值传递的方式,之所以可以这样做是因为在复制图像时共享的是同一块数据。

扫描二维码推送至手机访问。

版权声明:本文由lovedm.club发布,如需转载请注明出处。

本文链接:https://lovedm.club/?id=133

分享给朋友:

“OpenCV中简单的添加噪声” 的相关文章

C++ vector

vector是一个容器,类似于数组,使用的顺序存储结构,可以看做是可以动态拓展的数组,使用vector的优点是其以常数时间进行索引,缺点是在中间进行插入和删除操作代价比较高,但是如果插入和删除发生在尾端速度仍然较快。使用时需要包含头文件#include<vector>初始化方式:vect...

C++读取ASCII格式DEM数据

C++读取ASCII格式DEM数据

要使用OpenGL显示DEM,就把tif的DEM转成了ASCII格式的,用的是ArcMap工具箱里的栅格转ASCII,转出来的格式是这样的:用了6行来描述数据,如下:第一行:数据的列数ncols第二行:数据的行数 nrows第三行:数据左下角的X值xllcorner第四行:数据左下角的Y值yllco...

C++ 计算点到空间直线的距离

最近的工作中需要计算空间中点到直线的距离,网上找了个算法:链接很简单,就是余弦定理算出余弦,知道余弦算出正弦,然后求出高也就是距离。当然这里不考虑效率问题,实验性的代码,先能用再优化。struct Point {     double ...

C++ 派生类的析构函数的执行顺序

C++ 派生类的析构函数的执行顺序

C++中派生类是不会继承父类的构造函数和析构函数的,这一点要明确。派生类中构造函数的执行顺序是先父类的构造函数然后当前类,析构函数则相反。举例如下:#include <iostream> using namespace std; class&nb...

C++ map使用

map是STL的容器,就是键值对的表示,其中键是唯一的,一个map里每个键都是唯一的不会重复,map的内部是使用红黑树实现的,所以内部是有序的。 下面代码没有注释,直接看了。 #include <iostream> #include <string> #include...

FY4B warp

#include <iostream> #include <string> #include <gdal_priv.h> #include "gdalwarper.h" using std::string; void wa...