2016-06-06 8 views
1

Я хочу увеличить изображение contrast ниже, с opencv c++.Как увеличить контраст изображения с opencv C++?

enter image description here

Я использую histogram методы обработки например, выравнивание гистограмм (HE), гистограммы спецификации и т.д. Но я не достигает хорошего результата, например, как показано ниже изображения:

enter image description here

Какие идеи о том, как solve решить эту задачу? Или на каком ресурсе на internet я могу найти помощь?

ответ

2

Я не эксперт, но вы можете попытаться уменьшить количество цветов, объединив серые оттенки в темные серые и светлые серые в белые.

.: например

  • Найти наименьшее общее цвет в < 0.0, 0.5) диапазон, объединить его в сторону черного.
  • Найдите наименее распространенный цвет в диапазоне < 0.5, 1.0>, объедините его по направлению к белому.

Это позволит сократить количество цветов и поможет создать разрыв между brigher темных цветов может быть.

+0

если возможно руководство для меня пример кода. –

+1

Этого можно добиться с помощью кластерного алгоритма, такого как k-средство. Вот учебник: https://www.pyimagesearch.com/2014/07/07/color-quantization-opencv-using-k-means-clustering/ – richar8086

4

Я нашел полезный предмет на OpenCV для изменения контрастности изображения:

#include <cv.h> 
#include <highgui.h> 
#include <iostream> 

using namespace cv; 

double alpha; /**< Simple contrast control */ 
int beta; /**< Simple brightness control */ 

int main(int argc, char** argv) 
{ 
/// Read image given by user 
Mat image = imread(argv[1]); 
Mat new_image = Mat::zeros(image.size(), image.type()); 

/// Initialize values 
std::cout<<" Basic Linear Transforms "<<std::endl; 
std::cout<<"-------------------------"<<std::endl; 
std::cout<<"* Enter the alpha value [1.0-3.0]: ";std::cin>>alpha; 
std::cout<<"* Enter the beta value [0-100]: "; std::cin>>beta; 

/// Do the operation new_image(i,j) = alpha*image(i,j) + beta 
for(int y = 0; y < image.rows; y++) 
    { for(int x = 0; x < image.cols; x++) 
     { for(int c = 0; c < 3; c++) 
       { 
     new_image.at<Vec3b>(y,x)[c] = 
     saturate_cast<uchar>(alpha*(image.at<Vec3b>(y,x)[c]) + beta); 
      } 
    } 
    } 

/// Create Windows 
namedWindow("Original Image", 1); 
namedWindow("New Image", 1); 

/// Show stuff 
imshow("Original Image", image); 
imshow("New Image", new_image); 

/// Wait until user press some key 
waitKey(); 
return 0; 
} 

См: Changing the contrast and brightness of an image!

+0

это линейное преобразование и оно не достигает хорошего результата таких как изображения сверху. –

+0

@AlirezaAlipourBloordokani есть какой-либо метод, кроме линейного преобразования? может это вам помочь? Смотрите: [самый быстрый способ увеличить контрастность цветного изображения ...] (http://stackoverflow.com/questions/19363293/whats-the-fastest-way-to-increase-color-image-contrast-with-opencv- in-python-c) –

+0

Я использую все методы, но они не доходят до хорошего результата, такого как изображения сверху. Мне нужен мощный алгоритм ..... –

2

Этом может быть запоздалым, но вы можете попробовать создать функциюCLAHE() в openCV. Прекрасно работает для меня.

Смежные вопросы