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

تغییر Hue و Saturation و Intensity

+2 امتیاز
سلام.

اگر بخوام Hue و Satureation و Intensity را تغییر بدم چطور باید عمل کنم در ضمن توی فتوشاب یه گزینه colorize هم هست آن به چه صورت باید پیاده شه ؟ البته من در OpenCV انجام دادم ولی نشد.

 

تشکر
سوال شده اردیبهشت 6, 1393  بوسیله ی ملک پور (امتیاز 145)   8 27 33
بایستی مقدار مولفه های hsI را افزایش بدید با توجه به نیاز کاربر.یعنی چی نشد؟

1 پاسخ

+3 امتیاز
 
بهترین پاسخ
در حالت colorize شما فقط hue که کاربر مشخص می نماید را جایگزین hue تصویر نهایی می نمایید ولی در حالت معمولی offset را که کاربر می دهد با hue موجو در تصویر جمع می کنید در ضمن بازه hue از 0 تا 180 بوده و به صورت چرخشی یعنی اگر مقدار hue محاسبه شده از 180 بیشتر باشد باید از 180 کسر گردد.مقدار saturation و intensity باید به صورت uchar در آنها saturation cast صورت بگیرد.
 
void hueSaturationIntensity2(InputArray _src, OutputArray _dst, int hue, int saturation, int intensity,bool colorize){
	if (!(_src.depth() == CV_8U && (_src.channels() == 3 || _src.channels() == 4)))
		return;

	Mat src = _src.getMat();
	if (_dst.empty() || _src.size() != _dst.size())
		_dst.create(_src.size(), _src.type());


	Mat dst = _dst.getMat();
	Mat hsv_src;
	cvtColor(src, hsv_src, CV_BGR2HSV);
	src.copyTo(dst);

	for (int y = 0; y < hsv_src.rows; y++){
		uchar* hsv_row = hsv_src.ptr<uchar>(y);
		uchar* dst_row = dst.ptr<uchar>(y);
		

		int xx = 0;
		for (int x = 0; x < hsv_src.cols; x++){
			int hue_v ;
			if (!colorize)
				hue_v = (hsv_row[xx] + hue) % 180;
			else hue_v = hue % 180;

			while (hue_v < 0)
				hue_v = 180 + hue_v;
			
			dst_row[xx++] = uchar( hue_v);
			dst_row[xx++] = saturate_cast<uchar>(hsv_row[xx] + saturation);
			dst_row[xx++] = saturate_cast<uchar>(hsv_row[xx] + intensity);
			if (src.channels() == 4)
				xx++;

		}
	}

	cvtColor(dst, dst, CV_HSV2BGR);


}

 

 

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