Пиксельное представление изображений. Введение в OpenCV

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 35

/ , 2012

1.
.
OpenCV


www.uralvision.blogspot.com

perevalovds@gmail.com


1. . , ,
. .
2. . : , ,
, , -, .
. .
3. OpenCV - , , (
).
Mat OpenCV :
. . , , .
, . -
, .
4. OpenCV: , .
(, ).
(setTo).
: (),

, ,

.
.
,
.
- .
1- - .
2- -
3- - (Red,
Green, Blue), .
4- - , a- ()


.
1. RGB - "" (red, green, blue), .
2. CMYK - ( Cyan, Magenta, Yellow, Key color),
- .
3. HSL - , -
, .
H [0; 360]
S [0; 1]
L [0; 1]

HSL

.
: , ,
-
,
,
.
A[x,y] -> f(A[x,y]), f -
.
, , .


f(v) = 1, v>t, 0 . t - .

.

http://www.svi.nl/wikiimg/SeedAndThreshold_02.png

-
-

.
,

G( v ) = v^gamma
-


;

,
,
.


,
s = c*log(l+r),
, c > 0.
- , -
-
.
:
-
.

http://studdi.ru/images/gradational_transformation.JPG


,
,
.
8- :
vector<int> hist( 256, 0 );
for (int y=0; y<h; y++) {
for (int x=0; x<w; x++) {
int color = image.at<unsigned char>(y,x);
hist[ color ]++;
}
}



( ).

,
.
A, [0..255].
Amin = min( A(x,y) (x,y) );
Amax = max( A(x,y) (x,y) );
Norm(A)(x,y) = 255 * ( A(x,y) - Amin ) / (Amax - Amin).
- .
,
.

http://www.desicolours.com/colourful-nature-pics/19/09/2008


.
(
) , , ,

:
1. -
,
2.
.
, N (=256) ,

w*h
q = ------- .
N


, 0 0, 1, 2..i(0),
q, i(0),
Sum( hist[i], i=0 .. i(0) ) <= q.
, 1
i(0)+1, i(0)+2, ..., i(1),
Sum( hist[i], i=i(0)+1.. i(1) ) <= q,
, ,
Sum( hist[i], i=0 .. i(1) ) <= 2q.
...
n i(n),
Sum( hist[i], i=0 .. i(n) ) <= (n+1)q.
q = w*h / N,
N
n >= -------- Sum( hist[i], i=0 .. i(n) ) - 1.
w*h
n , ,

N
n = int -------- Sum( hist[i], i=0 .. i(n) ). :
w*h


8- (N = 256)
n ( 0 N-1)
Sum( hist[ i ], i = 0..n )
Eq(n) = min( int( N * ------------------------------ ), N-1 ).
w*h
( min N-1, N.
- ? )

, Amin, Amax
, .
,
.

http://www.desicolours.com/colourful-nature-pics/19/09/2008

http://www.desicolours.com/colourful-nature-pics/19/09/2008

OpenCV

"Open Computer Vision Library"



, ,
C/C++.

OpenCV
2000 - -, Intel, C-
- . ( Intel).
2006 - 1.0
- . ( ItSeez)
2008 - Willow Garage (. )
2009 - 2.0, ++
2010 - 2.2, CUDA/GPU
- ,
.
2013 (?) - khronos.org (
OpenGL, OpenCL).

OpenCV VisualStudio 2010


, Microsoft Visual C++ 2008/2010 Express Edition
OpenCV 2.4 - http://sourceforge.net/projects/opencvlibrary/files/latest/download
1. VS2010
2.
File - New - Project - Win32 Console Application,
Name Project1, .
3.
Alt+F7 -
* Configuration Properties - C/C++ - General - Additional Include Directories,
"C:\Program Files\OpenCV2.4\build\include";
"C:\Program Files\OpenCV2.4\build\include\opencv";
* Linker - General - Additional Library Directories:
C:\Program Files\OpenCV2.4\build\x86\vc10\lib
* Linker - Input - Additional Dependencies:
Release: opencv_core240.lib;opencv_features2d240.lib;opencv_highgui240.lib;opencv_imgproc240.lib
Debug: opencv_core240d.lib;opencv_features2d240d.lib;opencv_highgui240d.lib;opencv_imgproc240d.lib
4. Windows dll - D:\Program Files\Opencv2.4\build\x86\vc10\bin\
dll Release Debug .

OpenCV -

1. :
http://www.fitseniors.org/wp-content/uploads/2008/04/green_apple.jpg
C:\green_apple.jpg
2. Project1.cpp:
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
using namespace cv;
int main( int argc, const char** argv )
{
Mat image = imread( "C:\\green_apple.jpg" ); //
imshow( "image", image );
//
waitKey( 0 );
//
return 0;
}
3. F7 - , F5 - .
, .
: , " tbb_debug.dll" - ,
. OpenCV CMake,
dll : www.expo32.ru/download/OpenCV2.4Dll.zip

Mat
Mat

- OpenCV.

:
* :
Mat imageEmpty;

* w x h , 0..255 :
int w=150; int h=100;
Mat imageGray( cv::Size( w, h ), CV_8UC1 );
CV_8UC1 :
8U "unsigned 8 bit",
C1 " "

Mat

* 1-
Mat imageFloat( cv::Size(w, h), CV_32FC1 );
"float 32 bit"
* 3- 0..255
:
Mat imageRGB( cv::Size(w, h), CV_8UC3 );

Mat

1.

OpenCV ,
:
Image imageFloat;
imageGray.convertTo( imageFloat, CV_32FC1, 1.0 / 255.0 );
- OpenCV imageFloat.
, ,
.
2.
( std::vector), ,
.

Mat


Mat B = A;
A B, ,
,
copyTo clone:
image1.copyTo( image2 );
image3 = image1.clone();

Mat

:
1) Mat B = A; ,
,
. Mat
, .
Mat ( std::vector).
, , const Mat & .
2)
copyTo clone.

Mat

( STL shared_ptr, Java
) :
{
Mat A( cv::Size( 100, 100 ), CV_8UC1 );
// , ,
// .
{
Mat B = A;
// ,
// B .
//, B, A.
// , 2.
}
// B , ,
// 1.
}
// A , 0,
// , , .

Mat

setTo( s ),
s - , cv::Scalar.
Mat grayImage( cv::Size( 100, 100 ), CV_8UC1 );
grayImage.setTo( cv::Scalar( 50 ) );
Mat colorImage( cv::Size( 100, 100 ), CV_8UC3 );
colorImage.setTo( cv::Scalar( 50, 60, 70 ) );

int main( int argc, const char** argv )


{
Mat image = imread( "C:\\green_apple.jpg" );
//image1 0.3*image
Mat image1 = 0.3 * image;
imshow( "image", image );
imshow( "image1", image1 );
waitKey( 0 );
return 0;
}

main :
int main( int argc, const char** argv )
{
Mat image = imread( "C:\\green_apple.jpg" );
//
Rect rect = Rect(100, 100, 200, 200); //
Mat image3;
image( rect ).copyTo( image3 );
// image
imshow( "image3", image3 );
//
image( rect ) *= 2;
imshow( "image changed", image );
waitKey( 0 );
return 0;
}

Mat

OpenCV .
( ), .
, , ,
OpenCV, , .

,
- at.
0...255 :
//
int value = imageGray.at<uchar>(y, x);
//
imageGray.at<uchar>(y, x) = 100;
, x y .

Mat

split .
merge
.
void split ( const Mat& mtx,
vector<Mat>& mv

//
// 1-
//

)
void merge ( const vector<Mat>& mv,
Mat& dst

// 1-
//
//
//

)

, .

Mat

int main( int argc, const char** argv )
{
Mat image = imread( "C:\\green_apple.jpg" );
//
// - channels[0], channels[1], channels[2]
vector<Mat> channels;
split( image, channels );
//
// , - 2, 0.
imshow( "Red", channels[2] );
imshow( "Green", channels[1] );
imshow( "Blue", channels[0] );
waitKey( 0 );
return 0;
}

Mat


OpenCV ,
, [0,1].
8-

1.0 / 255.0.
(float
unsigned char) convertTo.
.
imageGray.convertTo( imageFloat, CV_32FC1, 1.0 / 255.0 );
!

Mat


cvtColor.
.
, 3- RGB-
:

cvtColor( inputRGB, outputGray, CV_BGR2GRAY );


:
cvtColor( inputGray, outputRGB, CV_GRAY2BGR );



1. ., . .
2. . , . .

OpenCV
1. OpenCV C++: http://opencv.willowgarage.
com/documentation/cpp/index.html
2. G. Bradski, A. Kaehler Learning OpenCV: Computer Vision with the OpenCV
Library
- , OpenCV C, C++.
3. Laganire R. OpenCV 2 Computer Vision Application Programming Cookbook
- .

You might also like