#include <opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include"opencv2/imgproc/imgproc.hpp"
#include <iostream>
using namespace std;
using namespace cv;
void f_getPixel(unsigned char *srcData, int width, int height, int param);
void f_getPixelMat(Mat& inputImage, Mat& outputImage, int div);
void f_getPixelMat_methon3(Mat& inputImage, Mat& outputImage, int div);
void f_getPixelMat_methon4(Mat& inputImage, Mat& outputImage, int div);
void main()
{
Mat srcImage, dstImage;
srcImage = imread("1.jpg");
dstImage = Mat::zeros(srcImage.size(), srcImage.type());
f_getPixelMat_methon4(srcImage, dstImage, 10);
imshow("DstImg", dstImage);
while (char(waitKey(1)) != 'q') {}
}
void f_getPixel(unsigned char *srcData, int width, int height, int param)
{
unsigned char* psrc = srcData;
unsigned int temp;
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width*3; j=j+3)
{
temp = (psrc[j+0] + psrc[j+1] + psrc[j+2])/3;
psrc[j+0] = temp + param;
psrc[j+1] = temp + param;
psrc[j+2] = temp + param;
}
psrc += width*3;
}
}
void f_getPixelMat(Mat& inputImage, Mat& outputImage, int div)
{
outputImage = inputImage.clone();
int rowNumber = outputImage.rows;
int colNumber = outputImage.cols*outputImage.channels();
unsigned int temp;
for (int i = 0; i < rowNumber; i++)
{
uchar* data = outputImage.ptr<uchar>(i);
for (int j = 0; j < colNumber; j=j+3)
{
temp = (data[j + 0] + data[j + 1] + data[j + 2]) / 3;
data[j+0] = temp + div / 2;
data[j+1] = temp + div / 2;
data[j+2] = temp + div / 2;
}
}
}
void f_getPixelMat_methon3(Mat& inputImage, Mat& outputImage, int div)
{
outputImage = inputImage.clone();
Mat_<Vec3b>::iterator it = outputImage.begin<Vec3b>();
Mat_<Vec3b>::iterator itend = outputImage.end<Vec3b>();
for (; it != itend; ++it)
{
(*it)[0] = (*it)[0] / div*div + div / 2;
(*it)[1] = (*it)[1] / div*div + div / 2;
(*it)[2] = (*it)[2] / div*div + div / 2;
}
}
void f_getPixelMat_methon4(Mat& inputImage, Mat& outputImage, int div)
{
outputImage = inputImage.clone();
int rowNumber = outputImage.rows;
int colNumber = outputImage.cols;
for (int i = 0; i < rowNumber; i++)
{
for (int j = 0; j < colNumber; j++)
{
outputImage.at<Vec3b>(i, j)[0] = outputImage.at<Vec3b>(i, j)[0] / div*div + div / 2;
outputImage.at<Vec3b>(i, j)[1] = outputImage.at<Vec3b>(i, j)[1] / div*div + div / 2;
outputImage.at<Vec3b>(i, j)[2] = outputImage.at<Vec3b>(i, j)[2] / div*div + div / 2;
}
}
}
转载请注明原文地址:https://ipadbbs.8miu.com/read-43472.html