xu ly anh cho robot
TRANSCRIPT
-
8/12/2019 XU LY ANH CHO ROBOT
1/56
-
8/12/2019 XU LY ANH CHO ROBOT
2/56
25/02/2014
Gii thiu OpenCV S dng OpenCV
Ci t OpenCV vi Visual Studio 2008 V d minh ha
-
8/12/2019 XU LY ANH CHO ROBOT
3/56
25/02/2014
Open Source Computer Vision Library.
L sn phm ca Intel. L mt b th vin rt tt v cc mnh,
h tr hu ht tt c nhng thao cc cbn trong cc vn ca ComputerVision.
c vit bng ngn ng C. c s dng nghiu
-
8/12/2019 XU LY ANH CHO ROBOT
4/56
25/02/2014
Chacc cutrc cbnnhim, ng,dy, mt, ma trn v mtsthao tc xl trn cc cutrc ny.
CxCore
Chahuhtcc thao tc lin quan nvicxl nh cpthpnhlcnh, trch bin,phn vng, tm contour,biniFourier
CV
Cc thao tc ln nhngfile nhv fileVideo nhcnh, hinthnh, chuyninhdngHighGUI
Lm vicviCameraCvCam
-
8/12/2019 XU LY ANH CHO ROBOT
5/56
25/02/2014
Tt cc cc t kha, cc hng u c vit hoaton b, bt u bi tip u ng CV, cc tcch nhau bi du gch di (_).
V d: CV_RGB2GRAY. Tn ca hm v cu trc c vit hoa ch ci
u mi ch c ngha v s dng tip u ngcv cho hm v Cv cho cu trc.
V d: hm cvFindContours v cu trc CvPoint.
-
8/12/2019 XU LY ANH CHO ROBOT
6/56
25/02/2014
Tn camthm c cutrc nhsau:cv
: Thao tc no csdng. V dnh
Set,Convert,Create. : Chnhitngm hnh nghngti. V d: cvGetRow, cvCreateImage,
: l mttham skhngbtbuc, xc nhkiu
tc ngcahm. V d: cvGet1D, cvGet2D
cvFindExtrinsicCameraParams_64d
-
8/12/2019 XU LY ANH CHO ROBOT
7/5625/02/2014
CxCore bao gm: Cc cu trc d liu c bn Cc thao tc ln array
Cc hm v Cc cu trc ng Cc hm tc ng ln d liu
Mt s hm v cu trc cn thit khc
-
8/12/2019 XU LY ANH CHO ROBOT
8/5625/02/2014
CvPoint: cu trc ta ca 1 im nh Cng h vi CvPoint cn c: CvPoint2D32f: cha ta thc,
CvPoint3D32f: cha ta thc ca im trongkhng gian.
Ngoi ra cn c CvPoint2D64f, CvPoint3D64f
-
8/12/2019 XU LY ANH CHO ROBOT
9/5625/02/2014
CvSize:Cha thng tin lu li kchthc
CvRect:Hnh ch nht CvMat:ma trn (mt cu trc c s
dng kh nhiu.) IplImage:Cha ng thng tin ca 1 nh.
-
8/12/2019 XU LY ANH CHO ROBOT
10/5625/02/2014
Nhm Create:L nhnghm khitocc cutrc
cvCreateImage, cvCreateMat Nhm tc ngvo nhngphntcaArray
cvGetRow, cvGetCol, Nhm cc hm Copy v Fill
cvCloneImage, cvCopy Cc hm thay ihnh dng
cvReshape, cvRepeat, Cc thao tc shc
cvAdd, cvSub, cvMax, ...
-
8/12/2019 XU LY ANH CHO ROBOT
11/5625/02/2014
Cc hm i s tuyn tnh.tiu biu lnhn ma trn, tch hu hng, tch vhng
cvDotProduct, cvMatMul, Cc bin i ri rc
cvDFT, cvDCT,...
Cc hm to s ngu nhin
-
8/12/2019 XU LY ANH CHO ROBOT
12/5625/02/2014
cvLine: v on thng cvRectangle: v hnh ch nht cvCircle: v hnh trn cvEllipse: v hnh ellipse
-
8/12/2019 XU LY ANH CHO ROBOT
13/5625/02/2014
Nhm x l nh Cc hm ly mu, ni suy v bin i hnh
hc: Cc bin i Affine, bin i kch thc,
Cc hm lm vic trn cc thnh phn linthng: nh tm cc component, tm cc ngvin (FindContour)
Cc b lc: Cc hm chuyn i h mu, blc Median, b lc Gaussian, Threshold
-
8/12/2019 XU LY ANH CHO ROBOT
14/5625/02/2014
Nhm phn tch cu trc Cc x l trn Contour(ng bin):bao gm
xp x Contour, tnh din tch Contour
Cc tnh ton hnh hc: V d: tm hnh ch nht c din tch nh nht cha
2 hnh ch nht cho trc
Mt s nhm khc Phn tch chuyn ng ca im nh Phn on nh (segmentation)
-
8/12/2019 XU LY ANH CHO ROBOT
15/5625/02/2014
Nhm tc ngln giao din Cc hm lm vicvicas: gmcc hm to
cas, hycas, lyHandle camtcas,thay ikch thccamtcas.
Lm vicvichutv bn phm: Cung cpmtshm cbnxl nhngskintngngvichutv bn phm.
Cc hm hinthnhln cas: ychcmthm duy nht: cvvShowImage.
Nhm tc ngln file nh cvLoadImage: cmtnhvo cutrc IplImage cvSaveImage: Lumtnhvo file
-
8/12/2019 XU LY ANH CHO ROBOT
16/5625/02/2014
Ci Visual Studio Ci OpenCV 2.1.0
Lin kt th vin- Copy ton b file .h trong th mc trong:
C:\OpenCV2.1\include\opencv
vo th mc:C:\Program Files\Microsoft Visual Studio 9.0\VC\include
- Copy tt c cc file .lib trong th mc:C:\OpenCV2.1\lib
vo th mc:
C:\Program Files\Microsoft Visual Studio 9.0\VC\lib- Copy tt c cc file .dll trong th mc:
C:\OpenCV2.1\bin
vo th mc: C:\WINDOWS\system32
Ci t Visual Studio 2008 v OpenCV
-
8/12/2019 XU LY ANH CHO ROBOT
17/5625/02/2014
Vo Project-> Properties (Alt+F7)->Configuration Properties->Linker->Input->Additional Dependencies
v g on text sau:cv210d.l ib cxcore210d.lib highgui210d.l ib cv210.li b cxcore210.li bhighgui210.lib
Ci t Visual Studio 2008 v OpenCV
-
8/12/2019 XU LY ANH CHO ROBOT
18/5625/02/2014
File/New/Project/C++/Empty Project
To file mi lp trnh
-
8/12/2019 XU LY ANH CHO ROBOT
19/5625/02/2014
1. To bin cha thng tin nh v videoa. Hm:
IplImage* ten_anh = 0; // chua thong tin anh
CvCapture* ten_video =0; // cha thong tin video
b. V d:
Mt s hm c bn ca OpenCV
-
8/12/2019 XU LY ANH CHO ROBOT
20/5625/02/2014
* To mt khung anh mi:
cvNamedWindow("Color", CV_WINDOW_AUTOSIZE);
* Hin th 1 nh:
cvShowImage("Color",img);
* ng ca s nh:
cvDestroyWindow("Color");* c thng tin nh
cvGetSize()
Mt s hm c bn ca OpenCV
-
8/12/2019 XU LY ANH CHO ROBOT
21/5625/02/2014
2. c v hin th file nh t my tnh.a. Hm:cvLoadImage()
IplImage* ten=cvLoadImage(ng dn);cvShowImage("anh",ten);
b. V d:#include "cv.h"#include "highgui.h"
#include
int main()
{
IplImage* ten=cvLoadImage("c:/1.jpg"); // load anh
cvShowImage("anh",ten); // hien thi anh
cvWaitKey(); // cho den khi an 1 phim
return 0;
}
Mt s hm c bn ca OpenCV
-
8/12/2019 XU LY ANH CHO ROBOT
22/5625/02/2014
3. Lu nha. Hm:
cvSaveImage()
b. V d:
#include "highgui.h"
int main()
{
IplImage* ten=cvLoadImage("c:/1.jpg"); // load anh
cvShowImage("anh",ten); // hien thi anh
cvSaveImage("D:/test.bmp",ten); // Lu nh vi mt tn khccvWaitKey(); // cho den khi an 1 phim
return 0;
}
Mt s hm c bn ca OpenCV
-
8/12/2019 XU LY ANH CHO ROBOT
23/56
25/02/2014
H mu: C 2 h mu hay dng l:
- RGB - gm 3 mu c bn R: G: xanh l cy
B: xanh da tri
- HSV(B) - gm 3 thnh phn H: mu scS: bo haV(B): sng
Trong x l nh hay dng h HSV x l, tm khi mu.
Mt s hm c bn ca OpenCV
-
8/12/2019 XU LY ANH CHO ROBOT
24/56
25/02/2014
4. Chuyn h mu:a. Hm:
cvCvtColor(anh_nguon,anh_dich, CV_BGR2HSV);//chuyen he maucvCvtColor(anh_mau,anh_xam,CV_RGB2GRAY); // chuyen sang
mau sam
b. V d:#include "cv.h"
#include "highgui.h"
int main() {
IplImage* im_rgb=cvLoadImage("c:/1.jpg"); // load anhcvShowImage("anh",im_rgb); // hien thi anh
IplImage*im_gray=
cvCreateImage(cvGetSize(im_rgb),IPL_DEPTH_8U,1);
cvCvtColor(im_rgb,im_gray,CV_RGB2GRAY);
cvShowImage("Anh Gray",im_gray);
Mt s hm c bn ca OpenCV
-
8/12/2019 XU LY ANH CHO ROBOT
25/56
25/02/2014
5. Tch cc knh mu:a. Hm:
cvSplit(im_rgb, imgBlue, imgGreen, imgRed, 0);
b. V d:#include "cv.h"
#include "highgui.h"int main() {
IplImage* im_rgb=cvLoadImage("c:/1.jpg"); // load anh
cvShowImage("anh",im_rgb); // hien thi anh
IplImage* imgRed = cvCreateImage(cvGetSize(im_rgb), IPL_DEPTH_8U, 1);
IplImage* imgGreen = cvCreateImage(cvGetSize(im_rgb), IPL_DEPTH_8U, 1);
IplImage* imgBlue = cvCreateImage(cvGetSize(im_rgb), IPL_DEPTH_8U, 1);
cvSplit(im_rgb, imgBlue, imgGreen, imgRed, 0);
cvShowImage("Blue Channel",imgBlue);
cvShowImage("Green Channel",imgGreen);
cvShowImage("Red Channel",imgRed);
Mt s hm c bn ca OpenCV
-
8/12/2019 XU LY ANH CHO ROBOT
26/56
25/02/2014
6. Truy cp vo tng im nha. Hm:
cvGet2D()
cvSet2D()
- s=cvGet2D(img, i, j); s gm 3 thnh phns.val[2]R (0-255)s.val[1]G (0-255)s.val[0]B (0-255)
- cvSet2D(img, i, j, s);
Mt s hm c bn ca OpenCV
-
8/12/2019 XU LY ANH CHO ROBOT
27/56
25/02/2014
b. V d: - Tm cc im nh c mu >100#include "cv.h"
#include "highgui.h"
int main() {
IplImage* im_rgb=cvLoadImage("c:/1.jpg"); // load anh
cvShowImage("anh",im_rgb); // hien thi anhIplImage* copy=cvCreateImage(cvGetSize(im_rgb),8,3); //Create a new image
CvScalar s,c; // create two scalar variables
for(int i=0;iheight);i++)
{ for(int j=0;jwidth);j++)
{ s=cvGet2D(im_rgb,i,j);if((s.val[2]>100))
{ c.val[2]=255; c.val[1]=0; c.val[0]=0; cvSet2D(copy,i,j,c); }
else { c.val[2]=0; c.val[1]=0;c.val[0]=0; cvSet2D(copy,i,j,c); }
}
}cvShowImage("Red",copy); // hien thi anh
-
8/12/2019 XU LY ANH CHO ROBOT
28/56
25/02/2014
7. Hm v ng thng, ng trn, ch nhta. Hm:cvLine(img, cvPoint(x,y), cvPoint(X,Y), cvScalar(0,0,255), 2);
cvCircle(img, cvPoint(X,Y), 3, CV_RGB(255,0,0), 3, 8, 0 );
cvRectangle(img,cvPoint(x,y), cvPoint(X,Y), cvScalar(0,255,255), 3);
b. V d:
Mt s hm c bn ca OpenCV
-
8/12/2019 XU LY ANH CHO ROBOT
29/56
25/02/2014
8. c cameraa. Hm:
cvCaptureFromCAM(CV_CAP_ANY)
b. V d:
#include "cv.h"
#include "highgui.h"
#include
int main() {
CvCapture* capture = cvCaptureFromCAM(CV_CAP_ANY);
while ( 1 ){
IplImage* frame = cvQueryFrame( capture ); // chp nh ng
cvShowImage("Camera", frame );
if ( (cvWaitKey(10) & 255) == 27 ) break; // an Esc de thoat
}
Mt s hm c bn ca OpenCV
-
8/12/2019 XU LY ANH CHO ROBOT
30/56
25/02/2014
9. Nhn dang khun mtTrong OpenCV c sn filehaarcascade_frontalface_alt.xml,
ta ch vic ly n ra v s dng.ng dn:
C:/OpenCV2.1/data/haarcascades/haarcascade_frontalface_alt.xml.V d: Tm khun mt trong anh.
Mt s hm c bn ca OpenCV
-
8/12/2019 XU LY ANH CHO ROBOT
31/56
25/02/2014
V d: Tm khun mt trong nh.#include "cv.h"
#include "highgui.h"
#include
int main() {
while ( 1 )
{
IplImage* anh = cvLoadImage("c:/2.jpg"); // load anh
CvHaarClassifierCascade * con_tro = 0; //con tr nhn din,
CvMemStorage * dem = 0; //khi to b nh m
dem = cvCreateMemStorage(0);
con_tro= (CvHaarClassifierCascade*)cvLoad(("C:/OpenCV2.1/data/
haarcascades/haarcascade_frontalface_alt.xml"),0,0,0);
CvSeq * khuon_mat= cvHaarDetectObjects(anh,con_tro, dem, 1.1, 3,
-
8/12/2019 XU LY ANH CHO ROBOT
32/56
25/02/2014
V d: Tm khun mt trong nh.
//v hnh ch nht xung quanh khun mt
for (int i=0;itotal:0);i++)
{
CvRect * r = (CvRect*)cvGetSeqElem(khuon_mat,i);
CvPoint pt1 = {r->x,r->y};
CvPoint pt2 = {r->x + r->width,r->y + r->height};
cvRectangle(anh,pt1,pt2,CV_RGB(255,255,0),3,4,0);
}
cvShowImage("Nhan dien khuon mat",anh );
cvWaitKey();
}
return 0;
Mt h b O CV
-
8/12/2019 XU LY ANH CHO ROBOT
33/56
25/02/2014
V d:- Vit chng trnh tm mt trong camera.
Mt s hm c bn ca OpenCV
-
8/12/2019 XU LY ANH CHO ROBOT
34/56
25/02/2014
S khi:
(Rs232)
X l nh trong rbt
Camera
My tinh
(xl)
Chp
(AVR)
ng c
-
8/12/2019 XU LY ANH CHO ROBOT
35/56
25/02/2014
Thut ton:
X l nh trong rbt
Chp nh
Lc
X l mu
To ngng
Tm ta mu
Truyn thng
-
8/12/2019 XU LY ANH CHO ROBOT
36/56
25/02/2014
X l nh trong rbt
Height
Width
a b c
1
2
.
.
.
Thut ton tm ta mu v truyn thng
Chng trnh to ngng (tm khi mu )
-
8/12/2019 XU LY ANH CHO ROBOT
37/56
25/02/2014
Chng trnh to ngng (tm khi mu ).
IplImage* tao_nguong(IplImage* frame)
{
IplImage* imgHSV = cvCreateImage(cvGetSize(frame), IPL_DEPTH_8U, 3);
cvCvtColor(frame, imgHSV, CV_BGR2HSV); //from RGB to HSV
IplImage*img=cvCreateImage(cvGetSize(imgHSV),IPL_DEPTH_8U, 1);
cvInRangeS(imgHSV, cvScalar(170,160,60),cvScalar(180,255,255),img);
return img;}
Tc dng:tm ra khi mu tha mn iu kin ra.
Chng trnh tm ta khi mu
-
8/12/2019 XU LY ANH CHO ROBOT
38/56
25/02/2014
Chng trnh tm ta khi mu
voidtrackObject( IplImage* img)
{
CvMoments *moments = (CvMoments*)malloc(sizeof(CvMoments));
cvMoments(img, moments, 1);
doublemoment10 = cvGetSpatialMoment(moments, 1, 0);
doublemoment01 = cvGetSpatialMoment(moments, 0, 1);
doublearea = cvGetCentralMoment(moments, 0, 0);
if(area>100){
intposX = moment10/area; // truyn thng gi tr ny
intposY = moment01/area; // truyn thng gi tr ny
}free(moments);
}
Mt s hm c bn ca OpenCV
-
8/12/2019 XU LY ANH CHO ROBOT
39/56
25/02/2014
V d:- Vit chng trnh tm v theo di mu trong camera.( theo di bng cch v ng theo mu di chuyn )
Mt s hm c bn ca OpenCV
LP TRNH GIAO DIN
-
8/12/2019 XU LY ANH CHO ROBOT
40/56
25/02/2014
LP TRNH GIAO DIN
1. Ci t cng COM
this->serialPort1->PortName = "COM1"; // t tn l Com1this->serialPort1->BaudRate = 9600; // tc truyn 9600this->serialPort1->Open(); // m cng
this->serialPort1->WriteLine("@"); // truyn k t @
LP TRNH GIAO DIN
-
8/12/2019 XU LY ANH CHO ROBOT
41/56
25/02/2014
LP TRNH GIAO DIN
2. Hin th s ln textbox
textBox1->Text = so.ToString();
LP TRNH GIAO DIN
-
8/12/2019 XU LY ANH CHO ROBOT
42/56
25/02/2014
LP TRNH GIAO DIN
2. TrackBar
this->trackBar2->Value = 2; // thit lp trackBar2 = 2textBox1->Text = this->trackBar2->Value ; // hin th ln textbox1
LP TRNH GIAO DIN
-
8/12/2019 XU LY ANH CHO ROBOT
43/56
25/02/2014
LP TRNH GIAO DIN
3. Timer
timer1->Interval = 1;
timer1->Enabled = false;
timer2->Interval = 10;
timer2->Enabled = true;
LP TRNH GIAO DIN
-
8/12/2019 XU LY ANH CHO ROBOT
44/56
25/02/2014
LP TRNH GIAO DIN
4. checkBox
this->checkBox1->Checked == true
this->checkBox1->Checked == false
LP TRNH GIAO DIN
-
8/12/2019 XU LY ANH CHO ROBOT
45/56
25/02/2014
LP TRNH GIAO DIN
5. Chng trnh con
private: System::Void captureImage(void)
{
}
private: System::Void captureImage( IplImage* img)
{
}
-
8/12/2019 XU LY ANH CHO ROBOT
46/56
25/02/2014
Vit chng trnh
LP TRNH GIAO DIN
-
8/12/2019 XU LY ANH CHO ROBOT
47/56
25/02/2014
LP TRNH GIAO DIN
6. Chng trnh chp nh
private: System::Void chup_anh(Void){
CvCapture* capture = cvCaptureFromCAM(CV_CAP_ANY);
srcImage = cvQueryFrame(capture);
}
LP TRNH GIAO DIN
-
8/12/2019 XU LY ANH CHO ROBOT
48/56
25/02/2014
LP TRNH GIAO DIN
7. Chng trnh x l nh, tm ra loan
private: System::Void xu_ly_anh(IplImage* img){
// chng trnh hm trc}
LP TRNH GIAO DIN
-
8/12/2019 XU LY ANH CHO ROBOT
49/56
25/02/2014
LP TRNH GIAO DIN
8. Hin th nh ln pictureBox
private: System::Void hien_thi_anh( IplImage* img){
IplImage* srcImage = img;
if((pictureBox1->Image == nullptr))
{
Bitmap^ bmpPicBox = gcnew Bitmap(pictureBox1->Width, pictureBox1->Height);
pictureBox1->Image = bmpPicBox;}
Graphics^ g = Graphics::FromImage(pictureBox1->Image);
Bitmap^ bmp = gcnew Bitmap(srcImage->width, srcImage->height, srcImage->widthStep,
System::Drawing::Imaging::PixelFormat::Format24bppRgb, IntPtr(srcImage->imageData));
g->DrawImage(bmp, (pictureBox1->Width-srcImage->width)/2, (pictureBox1->Height-srcImage->height)/2);
pictureBox1->Refresh();
delete(g);}
LP TRNH GIAO DIN
-
8/12/2019 XU LY ANH CHO ROBOT
50/56
25/02/2014
LP TRNH GIAO DIN
9. Hin th nh ln pictureBox, trong timer
private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) {
chup_anh();
xu_ly_anh(srcImage1);
hien_thi_anh(srcImage2);
}
LP TRNH GIAO DIN
-
8/12/2019 XU LY ANH CHO ROBOT
51/56
25/02/2014
LP TRNH GIAO DIN
10. Bi tp
Bi 1: Vit giao din x l nh cho robot xoay theo vt mu .Bi 2: Vit giao din x l nh cho robot xoay, d khong cch vi vt
mu .
-
8/12/2019 XU LY ANH CHO ROBOT
52/56
-
8/12/2019 XU LY ANH CHO ROBOT
53/56
#include
-
8/12/2019 XU LY ANH CHO ROBOT
54/56
25/02/2014
#include iostream
#include
using namespace std;
private: System::Void load(void)
{
ifstream red_;
red_.open(D:\abc.txt");red_>>r_r;red_>>r_g;red_>>r_b;
red_.close();textBox1->Text = r_r.ToString();
textBox2->Text = r_g.ToString();
textBox3->Text = r_b.ToString();
}
-
8/12/2019 XU LY ANH CHO ROBOT
55/56
#include
-
8/12/2019 XU LY ANH CHO ROBOT
56/56
#include iostream
#include
using namespace std;
private: System::Void save(void)
{
ofstream save;
save.open( "); if(save==NULL){MessageBox::Show("ERROR: Khong doc duoc file");
return;}
save