Wednesday, January 2, 2013

Producing negative of a grayscale image: C++ and OpenCV

Theory
The concept behind negative of grayscale image is very simple. Just subtract each intensity level of an image from 255. The negative transformation is given by the function
                         s = L - 1 - r
Where s is the pixel after transformation, r is the pixel before transformation and L is the maximum intensity level (in our case it is 256).

Program
The program is written in C++ using OpenCV library in QT IDE. If you are using QT IDE then add the following line of code in .pro file.


INCLUDEPATH += /usr/include/opencv/
CONFIG += link_pkgconfig
PKGCONFIG += opencv
LIBS += -Icv -Ihighhui


#include <opencv/cv.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;

int main()
{
    //read the image in matrix image
    Mat image = imread("charlie.jpg");

    // initialize the output matrix with zeros
    Mat new_image = Mat::zeros( image.size(), image.type() );

    // create a matrix with all elements equal to 255 for subtraction
    Mat sub_mat = Mat::ones(image.size(), image.type())*255;

    //subtract the original matrix by sub_mat to give the negative output new_image
    subtract(sub_mat, image, new_image);

     // 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;
}

Output

5 comments:

  1. Thanks but why the sub_mat is blue and not white ?

    ReplyDelete
    Replies
    1. Because Mat::ones function works only for one channel. Your sub_mat matrix is like that {255,0,0;255,0,0;...} The only first channel is ones.
      Use the following constructor instead:
      Mat sub_mat = Mat(image.rows,image.cols,image.type(),Scalar(1,1,1))*255;

      Delete

    2. Hai mắt Kiếm Tôn Lăng Thiên Hậu lại càng tuôn ra một luồng tinh quang khó có thể tưởng tượng. Hai mắt lão như đuốc nhìn chằm chằm vào sâu trong con sóng đang nhanh chóng phóng đến với tốc độ muốn cuốn sạch tất cả.

      Giờ phút này không chỉ có hai người bọn họ, đột nhiên một số thân ảnh già nua từ trong đám tu sĩ khắp bốn phía điên cuồng lao ra với tốc độ mà mắt thường khó có thể nhìn kịp.

      Những hình bóng già nua này chính là một số lão quái thành danh trên Thiên Vận Tinh. Mục đích của bọn họ đến đây là mang đám tiểu bối đến kiến thức một phen. Nhưng lúc này, họ nhìn thấy con sóng kia, hơn nữa sau khi nhìn thấy vật thể trong con sóng thì cả đám người lại đột nhiên lao ra giống như trẻ đi vạn tuổi.
      dong tam mu lậu cho thuê phòng trọ cho thuê phòng trọ nhạc sàn cực mạnh tư vấn pháp luật qua điện thoại công ty luật hà nội số điện thoại tư vấn luật dịch vụ thành lập doanh nghiệp
      Cảnh tượng chấn động này lập tức hấp dẫn ánh mắt của tất cả tu sĩ. Ánh mắt Vương Lâm trở nên lấp lánh, hắn gắt gao nhìn chằm chằm vào con sóng đang nhanh chóng phóng đến.

      Tốc độ của con sóng này quá nhanh, gần như vừa mới lóe lên đã xuyên qua thân thể của rất nhiều tu sĩ, từ xa nhìn lại giống như nó đang chồm lên rồi phóng thẳng về cửa Đông Hải Yêu Linh.

      Delete