#include<opencv2\opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
Mat dealImg(Mat &img);
int findMax(Mat &img);
int main() {
Mat img = imread("D://图片//882.jpg");
if (img.empty()) {
return -1;
}
Mat result;
result = dealImg(img);
imshow("result", result);
waitKey(0);
destroyAllWindows;
return 0;
}
Mat dealImg(Mat & img)
{
Mat temp = img.clone();
temp.convertTo(temp, CV_32FC3);
Mat result(img.size(), CV_32FC3);
int w = img.cols, h = img.rows;
int num = 0;
num = findMax(img);
int one = rand() % num;
int two = rand() % num;
int three = rand() % num;
for (int i = 0; i < img.rows; i++) {
float *pImg = temp.ptr<float>(i);
float *pResult = result.ptr<float>(i);
for (int j = 0; j < img.cols; j++){
pResult[j * 3 + 0] = pImg[j * 3 + 0] / one * 255;
pResult[j * 3 + 1] = pImg[j * 3 + 1] / two * 255;
pResult[j * 3 + 2] = pImg[j * 3 + 2] / three * 255;
}
}
result.convertTo(result, CV_8UC3);
return result;
}
int findMax(Mat & img)
{
Mat temp = img.clone();
cvtColor(temp, temp, CV_BGR2GRAY);
int num = 0;
for (int i = 0; i < img.rows; i++) {
uchar* p = img.ptr<uchar>(i);
for (int j = 0; j < img.cols; j++) {
if (num < p[j]) {
num = p[j];
}
}
}
return num;
}
效果:
原图:
变换后: