تغییر روشنایی و کنتراست تصویر - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

تغییر روشنایی و کنتراست تصویر

+1 امتیاز
برای تغییر brightness  و کنتراست در تصویر چه مولفه هایی از تصویر را باید تغییر بدیم توی OpenCV ?
سوال شده اردیبهشت 7, 1393  بوسیله ی ابید (امتیاز 781)   19 89 106
دوباره تگ گذاری شد اردیبهشت 7, 1393

1 پاسخ

+3 امتیاز
 
بهترین پاسخ

برای تغییر روشنایی مقادیر شدت نور را تغییر بدید و برای کنتراست هم scale شدت نور را تغییر بدید.

void contrastBrightness(InputArray _src, OutputArray _dst, float contrast, float brightness){
	Mat src = _src.getMat();
	if (_dst.empty() || _src.size() != _dst.size())
		_dst.create(_src.size(), _src.type());

	Mat dst = _dst.getMat();
	if (src.type() == CV_8UC1){
		for (int y = 0; y < src.rows; y++){
			uchar* src_row = src.ptr<uchar>(y);
			uchar* dst_row = dst.ptr<uchar>(y);
			for (int x = 0; x < src.cols; x++)
				dst_row[x] = saturate_cast<uchar>(contrast *(src_row[x] + brightness));
		}
	}
	for (int y = 0; y < src.rows; y++){
		uchar* src_row = src.ptr<uchar>(y);
		uchar* dst_row = dst.ptr<uchar>(y);
		int xx = 0;
		for (int x = 0; x < src.cols; x++){
			dst_row[xx++] = saturate_cast<uchar>(contrast *(src_row[xx] + brightness));
			dst_row[xx++] = saturate_cast<uchar>(contrast *(src_row[xx] + brightness));
			dst_row[xx++] = saturate_cast<uchar>(contrast *(src_row[xx] + brightness));
			if (src.type() == CV_8UC4)
				x++;

		}
	}

}

 

پاسخ داده شده اردیبهشت 8, 1393 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
انتخاب شد آبان 11, 1393 بوسیله ی ابید
...