xu ly anh cho robot

Upload: haisaodo

Post on 03-Jun-2018

232 views

Category:

Documents


0 download

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