Skip to main content

OpenCV : Make sharpen image color

We sometimes take pictures where there is no light, so the pictures come out dark. This means it did not have a wide range of colors. For example, an image with a minimum value of 20 and a maximum value of 100 will be dark. So we need to wide the color range of the image 0 to 255.






The full code is as follows.

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;

void meanVal(Mat* inputArray){
    double minVal, maxVal;
    minMaxIdx(*inputArray, &minVal, &maxVal); //get min, max value of matrix    
    double ratio = (maxVal - minVal)/255; 
    *inputArray = (*inputArray - minVal)/ratio; // wide image range    
    cout << minVal << "," << maxVal << endl;
}

int main() {
    Mat img = imread("./res/woman.png");
    imshow("origin", img);
    vector<Mat> bgr_img;
    split(img, bgr_img); // split matrix to 3 channels (Blue, Green, Red)    
    meanVal(&bgr_img[0]);
    meanVal(&bgr_img[1]);
    meanVal(&bgr_img[2]);

    merge(bgr_img, img); // merge three channels to on matrix
    img = img + Scalar(10, 20, 20); // add warm color to img    
    imshow("result", img);
    waitKey(0);
    return 0;
}


  • Split matrix by channel

void split(InputArray mat, OutputArrayOfArrays mv)

  • Merge channels to one matrix

void merge(InoutArraysOfArrays mv, OutputArray mat)

  • Get min, max value of matrix

void minMaxIdx(InputArray src, double* minVal, double* maxVal = 0, int* minIdx = 0, int* maxIdx = 0, InputArray mask = noArray());

Comments

Popular posts from this blog

OpenGL SL - Translate, roate, and scale

Translate, rotate and scale are most basic element of image effect. If you didn't understand how make effect at each pixel, please read again before post "Show Video and Image" . 1. Translate Translation means each pixel move parallel on the x, y-axis. In other words, if you want to translate 0.25 on the x-axis, a pixel should point to a distance of -0.25 from the original. Translate ex) void mainImage( out vec4 fragColor, in vec2 fragCoord ){     vec2 uv = fragCoord/iResolution.xy;     if (uv.x < 0.5 ){         // translate to x ( -0.25 )         uv.x += 0.25 ;     } else {         // translate to x ( +0.25 )         uv.x -= 0.25 ;     }     fragColor = texture (iChannel0, uv); } result) 2. Scale Scale also has a  similar concept to parallel translation. If you want to zoom in twice, each pixel s...

OpenGL SL - Mosaic effect

Mosaic effect is similar to lowering the resolution of an image. Let's see example image. And full source code likes below. void mainImage( out vec4 fragColor, in vec2 fragCoord ){     // Normalized pixel coordinates (from 0 to 1)     vec2 uv = fragCoord/iResolution.xy;     if (uv.x > 0.7 && uv.y < 0.4 ){          //left bottoom small image         uv.x -= 0.6 ;         uv *= 2.0 ;         fragColor = texture (iChannel0, uv);         fragColor += vec4 ( 0.2 );         return ;     }     //mosaic effect     uv = uv * 30.0 ;     vec2 uv = floor (uv);     uv = uv/ 30.0 ;     fragColor = texture (iChannel0, uv); } The key function of mosaic effect is "floor" If you want to make it sharper, multiply uv by ...

OpenCV : How to setting OpenCV in CLion

CLion is A Cross-Platform IDE for C and C++ by JetBrains Setting OpenCV in CLion is so easy. FIrst, make new c++ project. Second, edit CmakeList.txt cmake_minimum_required( VERSION 3.10 ) project( [YourProject] ) set( CMAKE_CXX_STANDARD 11 ) find_package( OpenCV REQUIRED ) add_executable( [YourProject] main.cpp ) target_link_libraries( [YourProject] ${OpenCV_LIBS} ) At Last include OpenCV to main.cpp #include <iostream> #include "opencv2/opencv.hpp" using namespace std ; using namespace cv ; ...