A pris un exemple d'image d'opencv (cat.jpg). Pour réduire la luminosité à une zone particulière. voici le lien pour l'imagecomment réduire l'intensité lumineuse d'une image
http://tinypic.com/view.php?pic=2lnfx46&s=5
A pris un exemple d'image d'opencv (cat.jpg). Pour réduire la luminosité à une zone particulière. voici le lien pour l'imagecomment réduire l'intensité lumineuse d'une image
http://tinypic.com/view.php?pic=2lnfx46&s=5
Voici une solution possible. Les points lumineux sont détectés en utilisant une opération de seuil simple. Ensuite, les points lumineux sont obscurcis en utilisant une transformation gamma. Le résultat semble légèrement meilleur, mais malheureusement, si les pixels de l'image sont exactement blancs, toutes les informations de pixels sont perdues et vous ne pourrez pas récupérer ces informations.
#include <opencv2/opencv.hpp>
#include <iostream>
#include <cfloat>
int threshold = 200;
double gammav = 3;
int main(int argc, char** argv)
{
cv::Mat image,gray_image,bin_image;
// read image
cv::imread(argv[1]).convertTo(image,CV_32FC3);
// find bright spots with thresholding
cv::cvtColor(image, gray_image, CV_RGB2GRAY);
cv::threshold(gray_image, bin_image, threshold, 255,0);
// blur mask to smooth transitions
cv::GaussianBlur(bin_image, bin_image, cv::Size(21,21), 5);
// create 3 channel mask
std::vector<cv::Mat> channels;
channels.push_back(bin_image);
channels.push_back(bin_image);
channels.push_back(bin_image);
cv::Mat bin_image3;
cv::merge(channels,bin_image3);
// create darker version of the image using gamma correction
cv::Mat dark_image = image.clone();
for(int y=0; y<dark_image.rows; y++)
for(int x=0; x<dark_image.cols; x++)
for(int c=0;c<3;c++)
dark_image.at<cv::Vec3f>(y,x)[c] = 255.0 * pow(dark_image.at<cv::Vec3f>(y,x)[c]/255.0,gammav);
// create final image
cv::Mat res_image = image.mul((255-bin_image3)/255.0) + dark_image.mul((bin_image3)/255.0);
cv::imshow("orig",image/255);
cv::imshow("dark",dark_image/255);
cv::imshow("bin",bin_image/255);
cv::imshow("res",res_image/255);
cv::waitKey(0);
}
merci sietschie – user2551056
Modification de la luminosité et de contraste tutoriel [cliquez ici] (http://docs.opencv.org/doc/tutorials/core/basic_linear_transform/basic_linear_transform.html). Si vous voulez changer seulement les points lumineux, vous avez besoin de quelque chose de plus sophistiqué: la segmentation, les zones de couleurs dominantes, etc. – William