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

اعمال whitebalance بر روی تصویر

+1 امتیاز

سلام.

من برای whitebalance از روش زیر استفاده کردم ولی متاسفانه در برخی از تصاویر خروجی خیلی خراب میشه.

void whitebalance(cv::Mat& img) {
   cv::Mat hsv;
   cv::cvtColor(img, hsv, cv::COLOR_BGR2HSV);
   cv::Mat h, s, v;
   cv::split(hsv, hsv);
   cv::equalizeHist(hsv[0], hsv[0]);
   cv::merge(hsv, hsv);
   cv::cvtColor(hsv, img, cv::COLOR_HSV2BGR);
}

آیا کسی راه بهتری سراغ داره؟

سوال شده مرداد 29, 1401  بوسیله ی zirak (امتیاز 473)   3 28 52

1 پاسخ

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

روش دیگر می تواند استفاده از تابع "cv::createColorBalanceWeights" از OpenCV باشد، که یک تصویر را می گیرد و وزن های هر کانال را برای متعادل کردن تصویر برمی گرداند. به عنوان مثال:

void whitebalance(cv::Mat& img) {
    cv::Mat balance_weights;
    cv::createColorBalanceWeights(img, balance_weights);
    cv::Mat output;
    cv::transform(img, output, balance_weights);
    img = output;
}

توجه به این نکته ضروری است که اینها فقط نمونه هایی هستند و بهترین روش برای هر تصویر خاص یا مجموعه ای از تصاویر به شرایط نور و ویژگی های خود تصاویر بستگی دارد. همیشه توصیه می شود روش های مختلف را آزمایش کنید و نتایج آنها را روی مجموعه ای از تصاویر معرف مقایسه کنید.

پاسخ داده شده بهمن 6, 1401 بوسیله ی farnoosh (امتیاز 8,362)   20 44 59
انتخاب شد بهمن 6, 1401 بوسیله ی مصطفی ساتکی
...