在很多项目中我们会运用到对图形图像的像素处理,很文章我们来总结以下使用opencv对图片的像素进行操作从而达到自己想要的结果。
所谓的像素是图像的基本元素,从根本来说,一张图片就是由数值组成的矩阵,在OpenCV中用Mat这个数据结构来表示图像,矩阵的每一个元素代表一个像素。
首先我们熟悉一下对图像的像素值的存取,对一个彩色图片增加噪点。
#include <QCoreApplication>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
void salt(Mat &image,int n){
for(int i=0;i<n;i++){
int k = qrand()%image.cols;
int j = qrand()%image.rows;
if(image.channels() ==1 ){ //灰度图
image.at<uchar>(j,k)=255;
}else if(image.channels() == 3){ //彩色图三通道,RGB
image.at<cv::Vec3b>(j,k)[0]=255;
image.at<cv::Vec3b>(j,k)[1]=255;
image.at<cv::Vec3b>(j,k)[2]=255;
}
}
}
int main()
{
Mat image = imread("1.jpg");
salt(image,3000);//调用函数增加噪点
if(image.empty())
{
namedWindow("can not find image ");
waitKey(5000);
return -1;
}
namedWindow("MyImage",1);
imshow("MyImage",image);
while(1)
waitKey(5000);
}
持续更新ing......持之以恒。