OpenCV随笔003-如何存取像素值

来源:互联网 发布:java ee javaweb 编辑:程序博客网 时间:2024/05/02 13:00

        像素是图像的基本元素,从根本上来说,一张图像是一个由数值组成的矩阵,矩阵的每一个元素代表一个像素,对于灰度图像来说,像素由8位无符号数来表示的(0-255),对于彩色图像来说,每个像素需要3个8位无符号数来表示红绿蓝三个颜色通道,这样的矩阵元素为三元数。

        为了获取矩阵元素,需要在代码中指定元素所在的行和列,程序会返回相应的元素。如果图像是单通道的,返回值是单个数值;如果图像是多通道的,返回值则是一组向量(Vector)。

        类cv::Mat有若干成员函数可以获取图像的属性。公有成员变量cols和rows给出了图像的宽和高。成员函数at(int y,int x)可以可以用来存取图像元素。

       这里我们通过一个简单的函数来说明如何直接存取像素值,这个函数能在图像中加入椒盐噪点。通过调用这个函数来实现像素的存取。

#include<opencv2/opencv.hpp>using namespace cv;void salt(Mat &image,int n){for(int k=0;k<n;k++){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;}}}

        下面是主程序:

#include"opencv2/opencv.hpp"using namespace cv;void salt(Mat&, int n);  int main(){srand(getTickCount());//初始化随机数发生器Mat image=imread("Demo.jpg",1);    if(!image.data)return -1;namedWindow("src");imshow("src",image);salt(image,7000);namedWindow("dst");imshow("dst",image);imwrite("salted.bmp",image);waitKey(3000);return 0;}


        处理的结果如图所示:



        

0 0
原创粉丝点击