Skip to content

Commit 0dd9ff5

Browse files
authored
Add files via upload
1 parent 16e2687 commit 0dd9ff5

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

hisEqualMyAlgo.cpp

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#include <iostream>
2+
#include <opencv2/highgui/highgui.hpp>
3+
#include <opencv2/imgproc/imgproc.hpp>
4+
5+
int main(int argc, char** argv) {
6+
7+
cv::Mat img = cv::imread(argv[1], cv::IMREAD_GRAYSCALE);
8+
9+
int freq[256] = {0};
10+
for(int i = 0; i < img.rows; ++i) {
11+
for(int j = 0; j < img.cols; ++j) {
12+
freq[(int)img.at<uchar>(i, j)]++;
13+
}
14+
}
15+
16+
int size = img.rows * img.cols;
17+
double sf = 255.0 / size;
18+
19+
int cumfreq[256] = {0};
20+
cumfreq[0] = freq[0];
21+
for(int i = 1; i < 255; ++i) {
22+
cumfreq[i] = freq[i] + cumfreq[i-1];
23+
}
24+
25+
int scale[256] = {0};
26+
for(int i = 0; i < 255; ++i) {
27+
scale[i] = cvRound((double)cumfreq[i] * sf);
28+
}
29+
30+
cv::Mat equalizedImg = img.clone();
31+
32+
for(int i = 0; i < img.rows; ++i) {
33+
for(int j = 0; j < img.cols; ++j) {
34+
equalizedImg.at<uchar>(i, j) = cv::saturate_cast<uchar>(scale[img.at<uchar>(i, j)]);
35+
}
36+
}
37+
38+
cv::namedWindow("Original image in greyscale", cv::WINDOW_AUTOSIZE);
39+
cv::imshow("Original image in greyscale", img);
40+
41+
cv::namedWindow("Equalized image", cv::WINDOW_AUTOSIZE);
42+
cv::imshow("Equalized image", equalizedImg);
43+
44+
cv::waitKey(0);
45+
return 0;
46+
}
47+
48+

0 commit comments

Comments
 (0)