Showing posts with label Image Processing. Show all posts
Showing posts with label Image Processing. Show all posts

HSV values of Image pixel using JavaCV


This post will explain how to get HSV color space values of Image pixel using JavaCV.
For JavaCV setup on Windows, follow link below
http://opencvlover.blogspot.in/2012/04/javacv-setup-with-eclipse-on-windows-7.html

If you want to access RGB color space values, then refer to link below
http://opencvlover.blogspot.in/2013/02/rgb-values-of-image-pixel-using-javacv.html

Pixel values in HSV color space are often required in Image processing. Following gist demonstrates how to access and print pixel values in HSVcolor space. We first convert image from RGB color space to HSV color space using 'cvCvtColor()''. We can call 'cvGet2D()' function to access image matrix and use it get pixel values at desired location.

This will print HSV values in console. This code comes really handy while using manual threshold.
You can fork me on github for complete project of this code.
https://github.com/nikhil9/getHSV

RGB values of Image pixel using JavaCV

This post will explain how to get RGB color space values of Image pixel using JavaCV.
For JavaCV setup on Windows, follow link below
http://opencvlover.blogspot.in/2012/04/javacv-setup-with-eclipse-on-windows-7.html

If you want to access HSV color space values, then refer to link below
http://opencvlover.blogspot.in/2013/02/hsv-values-of-image-pixel-using-javacv.html

Pixel values in RGB color space are often required in Image processing. Following gist demonstrates how to access and print pixel values in RGB color space. We can call 'cvGet2D()' function to access image matrix and use it get pixel values at desired location.


This will print RGB values in console. This code comes really handy while using manual threshold.
You can fork me on github for complete project of this code.
https://github.com/nikhil9/getRGB

Hough Circle detection in Javacv

Opencv provides Hough circle Detection algorithm which can be used to detect circles. Some information about how algorithm works and its example using Opencv in cpp can be found in below link

We will see how to use cvHoughCircle using Javacv. first we will have to process image to get grayscale or binary image. Using cvSmooth() helps most of the time for good detection however it depending upon kind of object  and background more image processing may be required.

First we will load image and then convert it to grayscale. Then use cvSmooth() to smooth the edges. cvHoughCircle() is used to detect circles and are stored in CvSeq. cvGetSeqElem() is used to extract each circle. We have to use each element in CvPoint3D32f. Center of circle is obtained in CvPoint type using cvPointFrom32f(). Obtained center and radius is used to draw circle on input image using cvCircle.

Following code is a demonstration of all the above processes.


Input Image:

Output Image:

Install Opencv 2.3.1 on Ubuntu 12.04 Precise Pangolin

Here are instructions for installation of Opencv 2.3.1 on Ubuntu 12.04 Precise Pangolin. For opencv installation we need FFmpeg, x264, v4l and their dependencies. It is a bit longer process as compared to windows installations. Step by step process is shown below.

1. Install dependencies for FFmpeg and x264
Enter following lines in terminal to check and install dependencies.
  
sudo apt-get install build-essential checkinstall git cmake libfaac-dev libjack-jackd2-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libva-dev libvdpau-dev libvorbis-dev libx11-dev libxfixes-dev libxvidcore-dev texi2html yasm zlib1g-dev
 


2. Install Gstreamer by entering following lines in terminal
sudo apt-get install libgstreamer0.10-0 libgstreamer0.10-dev gstreamer0.10-tools gstreamer0.10-plugins-base libgstreamer-plugins-base0.10-dev gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly gstreamer0.10-plugins-bad gstreamer0.10-ffmpeg
 


3. Download recent version (0.8+)of FFmpeg from https://github.com/FFmpeg/FFmpeg extract it and go to the directory. Now configure and install FFmpeg by entering following commons one by one.

./configure --enable-gpl --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-nonfree --enable-postproc --enable-version3 --enable-x11grab
make
sudo make install
 


4. Install recent version of x264 from ftp://ftp.videolan.org/pub/videolan/x264/snapshots/ extract it and go to the directory. Now configure and install x264 by entering following commons one by one.

./configure --enable-static
make
sudo make install
 


5. Download video for linux v4l libs from http://www.linuxtv.org/downloads/v4l-utils/ extract it and go to the directory. Install v4l using following command.
make
sudo make install
 


6. Install gtk libs using apt-get
sudo apt-get install libgtk2.0-0 libgtk2.0-dev
 


7. Install libjpeg using following command
sudo apt-get install libjpeg62 libjpeg62-dev
 


8. Now our dependencies are complete. We can install Opencv now. Download Opencv from http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/ Extract it and go to the directory. Enter following command to configure and install Opencv
mkdir build
cd build
cmake ..
make
sudo make install
 


We are done with installing Opencv on ubuntu 12.04 Precise Pangolin. In order to set path open /etc/bash.bashrc using your favorite text editor and add following lines
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
 


Restart your system and you are ready to use awesome Opencv!

Accessing webcam using javacv

Configuration steps for javacv on Eclipse running on windows 7 can be found in the link below.
http://opencvlover.blogspot.in/2012/04/javacv-setup-with-eclipse-on-windows-7.html

Instructions for importing video in javacv can be found in link below
http://opencvlover.blogspot.in/2012/05/importing-video-using-javacv.html

Accessing webcam using javacv is pretty much similar to importing video. We just have to set null parameter  while specifying video path in deceleration of OpenCVFramegrabber. Also we have to flip output from webcam horizontally to get it like mirror.

Following is the code snippet which uses OpenCVFrameGrabber to capture from webcam.


Importing video using Javacv

Configuration steps for javacv on Eclipse running on windows 7 can be found in the link below.
http://opencvlover.blogspot.in/2012/04/javacv-setup-with-eclipse-on-windows-7.html

In this post we will see how to import video in javacv for processing. Opencv uses CvCapture function for importing video. Javacv uses FrameGrabber class for grabbing video. Framegrabber can be used with 2 methods for importing video OpenCVFrameGrabber and FFMpegFramegrabber.
Following is the code snippet which uses OpenCVFrameGrabber to capture video file "Video.mp4".


If openCVFrameGrabber shows blank output or some error then try using FFMpegGrabber instead.

JavaCV setup with Eclipse on Windows 7

Update: These instructions are also applicable for 2.4+ version of opencv and javacv.

I was looking for image processing library for Java. My search stopped at JavaCV. JavaCV provides wrappers for OpenCV. so you can directly use OpenCV functions in Java. JavaCV also provides hardware accelerated full screen Image display with CanvasFrame and GLCanvasFrame.

JavaCV provides jar files which can be used with OpenCV installation. Following steps can be followed to setup JavaCV with Eclipse on Windows 7.

1.Install Java Development Kit (JDK) from the link below. Make sure to install 32bit or 64 bit as per your processor.

http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u32-downloads-1594644.html

2. Install Microsoft Visual C++ redistributable package

For 32 bit: http://www.microsoft.com/download/en/details.aspx?id=5555
For 64 bit: http://www.microsoft.com/download/en/details.aspx?id=14632

3. Download OpenCV super-pack from Sourceforge and extract it in you C:\Opencv

http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.3.1/

4. Set OpenCV .dll in systems path so that JavaCV can access it.

Go to Control Panel > System Security > System > Advanced System Settings > Environment Variables
In System variable select path and click on Edit. Now add following address in Variable address. I have extracted opencv package in C:\ directory. If you have installed at different location please update address accordingly.

For OpenCV 2.4.2 and earlier version 

For 32 bit:
C:\opencv\build\x86\vc10\bin;C:\opencv\build\common\tbb\ia32\vc10\

For 64 bit:
C:\opencv\build\x64\vc10\bin;C:\opencv\build\common\tbb\intel64\vc10\


For OpenCV 2.4.3 and later version 

For 32 bit:
C:\opencv\build\x86\vc10\bin

For 64 bit:
C:\opencv\build\x64\vc10\bin



Once this is done, the most important step is to Restart Windows.

5. Download JavaCV- bin from link below and extract it.

http://code.google.com/p/javacv/downloads/list

6. Create New Java Project 'demo' in Eclipse. 

Once created, go to Project > Properties > Java Build Path > Libraries > Add External JARs .
Go to your JavaCV Extracted folder and add all jar files. It should look like the pic below



7. Now create demo.java in src folder of the project. 

Paste following code and run the project.Put your image in project folder. In my case it is 'img1.png'


Result will look like this  



Displaying image in grayscale

OpenCV provides easy way to load image as IplImage in 3 band format, grayscale format or load image as it is(in its original format). Image loading function loads image from file as IplImage by taking 2 arguments.

  1. Image file name e.g. 'img1.png' in my case.
  2. Color code as integer.
Here is my img1.png file in original format.

We can provide 3 types of color code integers
  • 'CV_LOAD_IMAGE_COLOR'
    This will load image in 3channel color image i.e. RGB image.
    we will use following code and see what will be the result


    The result will be as following image.
    The image is not actually changed as we have given RGB Image and output is also displaying RGB image.

  • 'CV_LOAD_IMAGE_GRYASCALE'
    This will load image in gray scale format.
    we will use following code and see what will be the result


    The result will be as following image.
    The out put image is gray scale version of input image.

  • 'CV_LOAD_IMAGE_UNCHANGED'
    This will load image as it is.
    We can use this format if we want to load image in its original format.

Accessing Camera using OpenCV

OpenCV is fast and customizable. So one can use it for real time image processing. Thus OpenCV comes out to be very useful for using in image processing Robotics applications. In many image processing based robotics applications, a camera is mounted in robot. Using input from mounted camera behavior of robot is controlled.

In this post we will access the camera of laptop or any webcam using opencv and produce live video stream. I am using opencv 2.1 with CodeBlocks IDE on Ubuntu 11.04. If you want help in installation and configurations, then refer here.

We will create a window using highgui, capture steam form webcam using cvCaptureFromCAM and convert it to image frames using IplImage. Compile and run the following code to get live stream from your webcam.