Professional Documents
Culture Documents
Пиксельное представление изображений. Введение в OpenCV
Пиксельное представление изображений. Введение в OpenCV
Пиксельное представление изображений. Введение в OpenCV
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
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 -
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 ) );
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-
:
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
- .