You are on page 1of 18

OpenCV DIY

by NCKU CSIE VISION SYSTEM LAB

OpenCV DIY

1.0

2006/3/13

1.1

2006/7/21-8/2

1.2

2006/8/17

1.3

2007/3/6

1.4

2007/3/11

6.6
6.7

OpenCV trap
bug

Document maintained by NCKU CSIE VISION SYSTEM LAB

Editor

Personal Website
http://www.tintinpiano.com/

http://euler-amon.blogspot.com/

-1-

OpenCV DIY

by NCKU CSIE VISION SYSTEM LAB

1
2
3
3.1
3.2
3.3
4
4.1
4.2
4.3
5
5.1

OpenCV ................................................................................................................................................. 3
OpenCV libray Download && Install .................................................................................. 3
VC 6.0 OpenCV............................................................................................................. 4
Environment configuration ........................................................................................ 4
OpenCVDLL ................................................................................. 6
.h ............................................................................................................................. 6
.Net 2005 VC++OpenCV ............................................................................................ 7
Environment configuration ........................................................................................ 7
OpenCVDLL ................................................................................. 9
.h ............................................................................................................................. 9
.............................................................................................................................................. 10
openCVOptical Flow ...................................................................................................... 10

5.2
OpenCV Reference Manual ................................................................................................................... 10
5.3
OpenCV ........................................................................................................................... 10
6 .................................................................................................................................. 11
6.1
(BMPJPEG)LoadImage ....................................................................... 11
6.2
Gaussian Blur ...................................................................................................................... 11
6.3
Pixel ...................................................................................................................... 11
6.4
AVICaptureAVI ............................................................................................. 11
6.5
IplImageimageunsigned char?........................................... 13
6.6
AX=B(SVD)(Stack) ......................................................................... 13
6.7
AX=B(SVD)(Heap).......................................................................... 14
6.8
EigenValueEigenVector .................................................................................................................. 16
7 OpenCVOpenCVTrapBug ......................................................................... 18
7.1
cvSolve.......................................................................................................................................... 18
7.2
cvThreshold ................................................................................................................................. 18

-2-

OpenCV DIY

by NCKU CSIE VISION SYSTEM LAB

1 OpenCV
OpenCVIntel
paperOpenCV
! OpenCVCode

(Eigen Value)
(MeanMedianVariance)OpenCV

2 OpenCV libray Download && Install


http://sourceforge.net/project/showfiles.php?group_id=22870

opencv-winbeta5
OpenCV

-3-

OpenCV DIY

by NCKU CSIE VISION SYSTEM LAB

3 VC 6.0 OpenCV
3.1 Environment configuration
I.

ALT + F7 LINK
cv.lib highgui.lib cxcore.lib

II. ToolsoptionDirectories Include files


C:\Program Files\openCV\otherlibs\highgui
C:\Program Files\openCV\cv\include
C:\Program Files\openCV\cvaux\include
C:\Program Files\openCV\cxcore\include
C:\Program Files\openCV\bin

-4-

OpenCV DIY

by NCKU CSIE VISION SYSTEM LAB

III. ToolsoptionDirectories Lib


C:\Program Files\openCV\lib
C:\Program Files\openCV\bin

http://www.site.uottawa.ca/~laganier/tutorial/opencv+directshow/cvision.htm

-5-

OpenCV DIY

by NCKU CSIE VISION SYSTEM LAB

3.2 OpenCV DLL


OpenCV C:\Program Files\OpenCV\bin OpenCV
DLL C:\WINDOWS\system32

3.3 .h
OpenCV library.h .cpp .h
#include <cv.h>
#include <highgui.h>
#include <cxcore.h>
OpenCV

-6-

OpenCV DIY

by NCKU CSIE VISION SYSTEM LAB

4 .Net 2005 VC++ OpenCV


4.1 Environment configuration
I.

Link lib
menu [Project]Property Linker Input Additional
Dependencies libcv.lib highgui.lib cxcore.lib
[] Debug Release

II. Include
menu [Tools]Options Projects and Solutions VC++ Directories
Show directories for Include files
C:\Program Files\openCV\otherlibs\highgui
C:\Program Files\openCV\cv\include
C:\Program Files\openCV\cvaux\include
C:\Program Files\openCV\cxcore\include
-7-

OpenCV DIY

by NCKU CSIE VISION SYSTEM LAB

C:\Program Files\openCV\bin

III. Lib
menu [Tools]Options Projects and Solutions VC++ Directories
Show directories for Library files
C:\Program Files\openCV\lib
C:\Program Files\openCV\bin

-8-

OpenCV DIY

by NCKU CSIE VISION SYSTEM LAB

4.2 OpenCV DLL


OpenCV C:\Program Files\OpenCV\bin OpenCV
DLL C:\WINDOWS\system32

4.3 .h
OpenCV library.h .cpp .h
#include <cv.h>
#include <highgui.h>
#include <cxcore.h>
OpenCV

-9-

OpenCV DIY

by NCKU CSIE VISION SYSTEM LAB

5
5.1 openCV Optical Flow
http://ai.stanford.edu/~dstavens/cs223b/stavens_opencv_optical_flow.pdf

5.2 OpenCV Reference Manual


http://cs.uccs.edu/~jhhollan/JHH/JHH_Spring04/CS584/OpenCV_References.html

5.3 OpenCV
C:\Program Files\OpenCV\samples\c OpenCV
(.c )(.exe)contour.c
contour.exe
contour.c

Camshift.c RGB HSV HSV

- 10 -

OpenCV DIY

by NCKU CSIE VISION SYSTEM LAB

! DLL
cv097.dll cxcore097.dll highgui097.dll C:\Program
Files\OpenCV\bin

6
6.1 (BMPJPEG) LoadImage
6.2 Gaussian Blur
Gaussian button button
void COpenCVView::OnBUTTONGaussianSmooth()
{
if(ifLoadFile)
{
// IPL_DEPTH_8U unsigned char , 3 3 channel
// cv_smoothed_image size cv_color_image
IplImage* cv_smoothed_image =
cvCreateImage( cvGetSize(cv_color_image), IPL_DEPTH_8U , 3 );
// Guassian Smooth, Window Size 5
cvSmooth(cv_color_image, cv_smoothed_image, CV_GAUSSIAN, 5 , 5);
// windowcv_smoothed_image
cvNamedWindow("Smoothed Image", 1 );
cvShowImage("Smoothed Image", cv_smoothed_image);
// cv_gray_image
cvReleaseImage(&cv_smoothed_image);
}
else
MessageBox("Load Image File First!");
}

6.3 Pixel
// (Threshold Image)
for( int i=0; i<imgHeight; i++)
for( int j=0; j<imgWidth; j++)
{
// img
intensity = cvRound(cvGetReal2D(img, i, j);
if(intensity > 255)
cvSetReal2D(cv_gray, i, j, 255);
else if(intensity < 0)
cvSetReal2D(cv_gray, i, j, 0);
else
cvSetReal2D(cv_gray, i, j, intensity);
}

6.4 AVI CaptureAVI

- 11 -

OpenCV DIY

by NCKU CSIE VISION SYSTEM LAB

CvCapture* capture = cvCaptureFromAVI("infile.avi");

IplImage* image = 0;
if(!cvGrabFrame(capture)){
// capture a frame
printf("Could not grab a frame\n\7");
exit(0);
}
image = cvRetrieveFrame(capture);

frameH (Height)
frameW (Width)
fps FrameRate
numFrames frame

int
int
int
int

frameH
frameW
fps
numFrames

=
=
=
=

(int)
(int)
(int)
(int)

cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT);
cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH);
cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);
cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT);

frame number X frame?


numFrames video frame

cvSetCaptureProperty(capture, CV_CAP_PROP_POS_AVI_RATIO, (double) X / numFrames);

// Grab Frame

if(!cvGrabFrame(capture)){
// capture a frame
printf("Could not grab a frame\n\7");
exit(0);
}
img = cvRetrieveFrame(capture);
- 12 -

OpenCV DIY

by NCKU CSIE VISION SYSTEM LAB

6.5 IplImage image unsigned char


?
// image
imgSize = cvGetSize(image);
// IplImage image BYTE image_rawdata
BYTE *image_rawdata;
cvGetImageRawData( image, ( BYTE** )&image_rawdata, 0, &imgSize );
// image 3 channel (RGB) image_rawdata Height * Width * 3
for(j = 0; j < imgSize.height ; j ++)
for(i = 0; i < imgSize.width ; i ++)
{
// (i,j) pixel RGB
B = image_rawdata[ (j * imgSize.width + i) * 3 + 2];
G = image_rawdata[(j * imgSize.width + i) * 3 + 1];
R = image_rawdata[(j * imgSize.width + i) * 3 + 0];
}

6.6 AX=B (SVD )( Stack )


Matrix/vector operations
3
1 2 3

A= 4 5 6 B= 2
1
7 8 9

OpenCV AX=B X ?

double va[] = {
1, 2, 3,
4, 5, 6,
7, 8, 9,
};
double vb[] = {3, 2, 1};
double vx[3];
CvMat cvA, cvB, cvX;

- 13 -

OpenCV DIY

by NCKU CSIE VISION SYSTEM LAB

// va Initialize cvA 3 x 3
cvInitMatHeader(&cvA, 3, 3, CV_64FC1, va);
// vb Initialize cvB 3 x 1
cvInitMatHeader(&cvB, 3, 1, CV_64FC1, vb);
// vx Initialize cvX 3 x 1
cvInitMatHeader(&cvX, 3, 1, CV_64FC1, vx);
// cvX (cvA cvX = cvB)
//CV_SVD SVD CV_LU LU
cvSolve(&cvA, &cvB, &cvX, CV_SVD);
// cvX
//cvX 3 X 1
//cvGetReal2D(&cvX, row, column);

cvX (row,column) element

double x[3];
x[0] = cvGetReal2D(&cvX, 0, 0);
x[1] = cvGetReal2D(&cvX, 1, 0);
x[2] = cvGetReal2D(&cvX, 2, 0);

6.7 AX=B (SVD )( Heap )


6.7 Heap
Heap (Stack
Heap ).net windows form
pictureBox1_MouseDown button1_Click pictureBox1
button1 fit cvSolve
Heap ( Least
Square )
ArrayList^ testPoints; // testPoints = gcnew ArrayList();
private: System::Void pictureBox1_MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^
e) {
Graphics^ g = Graphics::FromImage(pictureBox1->Image);
Point tempPoint;
int x,y;
SolidBrush^ mySolidBrush2 = gcnew SolidBrush(Color::Lime);
int circleR = 2;
x = e->X;
- 14 -

OpenCV DIY

by NCKU CSIE VISION SYSTEM LAB

y = e->Y;

tempPoint = Point(x,y);
testPoints->Add(tempPoint);

g->FillEllipse(mySolidBrush2, x - circleR, y - circleR, circleR * 2, circleR * 2);


pictureBox1->Refresh();
}
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
int n = testPoints->Count;
CvMat* cvA = cvCreateMat( n, 3, CV_32FC1 );
CvMat* cvB = cvCreateMat( n, 1, CV_32FC1 );
CvMat* cvX = cvCreateMat( 3, 1, CV_32FC1 );
for(int i=0; i<n; i++)
{
cvSetReal2D(cvA, i, 0, 2.0*(float)((Point)testPoints[i]).X);
cvSetReal2D(cvA, i, 1, 2.0*(float)((Point)testPoints[i]).Y);
cvSetReal2D(cvA, i, 2, 1);
}
for(int i=0; i<n; i++)
cvSetReal2D(cvB, i, 0, pow((float)((Point)testPoints[i]).X, 2) +
pow((float)((Point)testPoints[i]).Y, 2));
cvSolve(cvA, cvB, cvX, CV_SVD);
double c1 = cvGetReal2D(cvX, 0, 0);
double c2 = cvGetReal2D(cvX, 1, 0);
double c3 = cvGetReal2D(cvX, 2, 0);
//Drawing the fitting circle
Graphics^ g = Graphics::FromImage(pictureBox1->Image);
int x,y;
Pen ^skyBluePen = gcnew Pen(Brushes::DeepSkyBlue);
int circleR = sqrt(c3 + pow(c1, 2) + pow(c2, 2));
x = c1;
y = c2;
g->DrawEllipse(skyBluePen, x - circleR, y - circleR, circleR * 2, circleR * 2);
pictureBox1->Refresh();
cvReleaseMat(&cvA);
cvReleaseMat(&cvB);
cvReleaseMat(&cvX);
}
- 15 -

OpenCV DIY

by NCKU CSIE VISION SYSTEM LAB

6.8 EigenValueEigenVector
Matrix/vector operations

Eigen analysis (of a symmetric matrix):

CvMat* A = cvCreateMat(3,3,CV_32FC1);

CvMat* E = cvCreateMat(3,3,CV_32FC1);

CvMat* l = cvCreateMat(3,1,CV_32FC1);

cvEigenVV(&A, &E, &l); // l = eigenvalues of A (descending order)

// E = corresponding eigenvectors (rows)


CODE:
double va[] = {
1, 2, 3
4, 5, 6
7, 8, 9
};
double ve[9] ;
double vl[3];
CvMat cvA, cvE, cvl;
// va Initialize cvA 3 x 3
cvInitMatHeader(&cvA, 3, 3, CV_64FC1, va);
// ve Initialize cvE 3 x 3
cvInitMatHeader(&cvB, 3, 3, CV_64FC1, ve);
// vl Initialize cvl 3 x 1
cvInitMatHeader(&cvl, 3, 1, CV_64FC1, vx);
//1. cvA EigenVlue cvl
//2. cvA Eigenvector cvE ( row)
cvEigenVV(&cvA, &cvE, &cvl);
//************ **************
// 1 EigenValue
double first_eigenvalue = cvGetReal2D(&cvX, 0, 0);
// 1 EigenValue EigenVector
- 16 -

OpenCV DIY
double first_eigenvector[3];
eigenvector [0] = cvGetReal2D(&cvE, 0, 0);
eigenvector [1] = cvGetReal2D(&cvE, 0, 1);
eigenvector [2] = cvGetReal2D(&cvE, 0, 2);
// 2 EigenValue
double second_eigenvalue = cvGetReal2D(&cvX, 1 ,0);
// 2 EigenValue EigenVector
double second_eigenvector[3];
second_eigenvector [0] = cvGetReal2D(&cvE, 1, 0);
second_eigenvector [1] = cvGetReal2D(&cvE, 1, 1);
second_eigenvector [2] = cvGetReal2D(&cvE, 1, 2);

- 17 -

by NCKU CSIE VISION SYSTEM LAB

OpenCV DIY

by NCKU CSIE VISION SYSTEM LAB

OpenCV OpenCV Trap Bug


7.1 cvSolve
cvSolve Least Square Matrix element

OpenCV

7.2 cvThreshold
cvThreshold CV_THRESH_BINARY
CV_THRESH_BINARY_INV OpenCV
Bug

- 18 -

You might also like