1.전역변수 선언 필요
- 반환할 주소 값 나타내는 변수 여기선 alpha
- main, 외부함수에서 사용할 Mat 형 변수.
- 전역변수 선언 안하고 void* userdata=0; 구문 바꾸어서 데이터 전달하려고 시도했으나
실패..
2.createTrackbar("트랙바이름", "표시될위치",int 값 반환할 주소, 트랙바에서 최대값, 슬라이더 위치 바뀌면 실행 될 콜백 함수,?)
namedWindow("controled");
createTrackbar("brigtnesscontrol", "controled", &alpha, 256*8/* alpha max 8로 설정*/, on_trackbar, NULL);
3.콜백함수
콜백함수 모르겠음..
void on_trackbar(int, void*);
4.code
adjcont
#pragma warning(disable: 4819)
#include "opencv2/opencv.hpp"
#include <iostream>
using namespace cv;
using namespace std;
void on_trackbar(int, void*);
Mat dst,src;
int alpha=4*256;//alpha 값 최대 256*8
double input_image_luminous_sum = 0;
double output_image_luminous_sum = 0;
int pixel_count;
int input_img_lumi_mean = 0;
int main(int argc, char** argv)
{
src = imread("lenna.bmp", IMREAD_GRAYSCALE); if (src.empty()) { cerr << "Image load failed!" << endl; return -1; }
dst.create(src.rows, src.cols, src.type());
pixel_count = (src.rows)*(src.cols);
// 평균 휘도 구하기
for (int i = 0; i < src.rows; i++) {
for (int j = 0; j < src.cols; j++) {
input_image_luminous_sum = src.at<uchar>(i, j) + input_image_luminous_sum;
}
}
input_img_lumi_mean = input_image_luminous_sum / pixel_count; // 평균 휘도
namedWindow("controled");
createTrackbar("brigtnesscontrol", "controled", &alpha, 256*8/* alpha max 8로 설정*/, on_trackbar, NULL);
cout << "input image 평균휘도 (input_image_luminous_mean/pixel_count) : " << input_image_luminous_sum / pixel_count << "\n" << endl;
cout << "초기 alpha : " << alpha/256. << "\n" << endl;
imshow("src", src);
dst = src + (src - input_img_lumi_mean)*(alpha / 256.);
imshow("dst", dst);
waitKey(0);
return 0;
}
void on_trackbar(int, void*) {
output_image_luminous_sum = 0;
dst = src + (src - input_img_lumi_mean)*(alpha / 256.);
for (int i = 0; i < src.rows; i++) {
for (int j = 0; j < src.cols; j++) {
output_image_luminous_sum = dst.at<uchar>(i, j) + output_image_luminous_sum;
}
}
cout << "output image 평균휘도 (output_image_luminous_mean/pixel_count) : " << (output_image_luminous_sum / pixel_count) << "\n" << endl;
cout << "alpha : " << alpha/256. << "\n" << endl;
imshow("src", src);
imshow("dst", dst);
}
댓글 없음:
댓글 쓰기