Home >Database >Mysql Tutorial >opencv2对读书笔记操作图像1

opencv2对读书笔记操作图像1

WBOY
WBOYOriginal
2016-06-07 15:00:511164browse

一些小概念 1.从根本上来说,一张图像是一个由数组成的矩阵。这也是OpenCV2用cv::Mat这个数据结构来表示图像的原因。 2.矩阵的每一个元素代表一个像素。对于灰度图像,像素由8位无符号数来表示,其中0代表黑色,255代表白色。对于彩色图像而言,每个像素需要


一些小概念

1.从根本上来说,一张图像是一个由数值组成的矩阵。这也是OpenCV2用cv::Mat这个数据结构来表示图像的原因。

2.矩阵的每一个元素代表一个像素。对于灰度图像,像素由8位无符号数来表示,其中0代表黑色,255代表白色。对于彩色图像而言,每个像素需要三个这样的8位无符号数来表示三个颜色通道。这种情况下矩阵元素是一个三元数。


(1)关于矩阵元素的存取

 

书中举了一个椒盐噪点的例子


#include <opencv2>
#include <opencv2>

void salt(cv::Mat &image, int n) {

	int i,j;
	for (int k=0; k<n k i="rand()%image.cols;" j="rand()%image.rows;" if image.at>(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; 
		}
	}
}

int main()
{
	srand(cv::getTickCount()); // 产生随机种子

	cv::Mat image= cv::imread("2.jpg",0);

	salt(image,5000);

	cv::namedWindow("Image");
	cv::imshow("Image",image);

	cv::imwrite("salted.bmp",image);

	cv::waitKey(5000);

	return 0;
}

</:vec3b></:vec3b></:vec3b></n></opencv2></opencv2>


结果图像


opencv2对读书笔记操作图像1


  opencv2里使用at这个函数对矩阵元素经行存取


(2)使用指针变量图像


书中给了一个颜色缩减的例子


#include <iostream>

#include <opencv2>
#include <opencv2>

void colorReduce(cv::Mat &image, int div=64) {

	int nl= image.rows; 
	int nc= image.cols * image.channels(); 

	for (int j=0; j<nl j uchar data="image.ptr<uchar">(j);

		for (int i=0; i<nc i data div int main cv::mat image1 colorreduce cv::namedwindow result cv::imshow cv::waitkey return><br>
结果图像
<p><img  src="pic/20151007/1zrq4it5vpc.png" alt="opencv2对读书笔记操作图像1" ><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><span><br>
<br>
</span></p>


</nc></nl></opencv2></opencv2></iostream>
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn