基础学习笔记之opencv基本绘图.docx

上传人:b****8 文档编号:10464614 上传时间:2023-02-13 格式:DOCX 页数:13 大小:203.52KB
下载 相关 举报
基础学习笔记之opencv基本绘图.docx_第1页
第1页 / 共13页
基础学习笔记之opencv基本绘图.docx_第2页
第2页 / 共13页
基础学习笔记之opencv基本绘图.docx_第3页
第3页 / 共13页
基础学习笔记之opencv基本绘图.docx_第4页
第4页 / 共13页
基础学习笔记之opencv基本绘图.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

基础学习笔记之opencv基本绘图.docx

《基础学习笔记之opencv基本绘图.docx》由会员分享,可在线阅读,更多相关《基础学习笔记之opencv基本绘图.docx(13页珍藏版)》请在冰豆网上搜索。

基础学习笔记之opencv基本绘图.docx

基础学习笔记之opencv基本绘图

基础学习笔记之opencv(13):

基本绘图

  本文主要讲讲怎样用opencv画一些基本图形,这些图形包括,直线,圆,椭圆,多边形等。

参考资料为opencv自带tutiol及其code。

  开发环境:

ubuntu12.04+Qt4.8.2+QtCreator2.5+opencv2.4.2

  实验功能:

  1.单击Drawing1按钮,将会画出atom图形,并且可以看出该图形成的过程,共分5个步骤画,每画完1个部分会自动停留1s,以便观察,然后画下一个部分,直至完成atom图形。

  2.单击Drawing2按钮,将会画出rook图形,并且可以看出该图形成的过程,共分3个步骤画,每画完1个部分会自动停留1s,以便观察,然后画下一个部分,直至完成atom图形。

  3.单击close按钮,退出程序。

  实验说明:

  1.QtextEdit除了用append()函数显示图片外,还可以用insertHtml()函数和setPlainText()来显示,用法类似,其中insertHtml()可以用来显示图片和有格式的文字,而setPlainText()只能用来显示无格式的文字。

  2.为什么TextBrowser下的append()函数2个连在一起使用时,只有当最后一个append函数运行完后才显示出append的内容呢?

  比如说,

ui->textBrowser->append(“first”);

usleep(1000000);//延时1s

ui->textBrowser->append(“second”);

usleep(1000000);

ui->textBrowser->append(“third”);

  实际运行到这几句代码时,并不是显示完first,延时1s后显示second,再延时1s后显示third.而是直接延时2秒,first,second,third同时显示呢?

  而把程序改成在终端输出字符串,用的usleep函数,其结果却正常,能满足我们预先设定的了。

即改为下面代码时:

cout<<"first"<

usleep(1000000);//延时1s

cout<<"second"<

usleep(1000000);

count<<"third"<

 

  其原因在主线程GUI中不宜采用sleep()等函数,否则会出现意想不到的结果。

  如果需要延时,#include后,可以用下面的代码(比如说延时1s):

QElapsedTimert;

t.start();

while(t.elapsed()<1000)

QcoreApplication:

:

processEvents();

  3.fillPoly函数的第2个参数是指1个指向Point的双指针,因为该函数可以同时填充多个多边形。

第3个参数为指向整型的指针,表示每个多边形中顶点的个数。

实验结果:

画atom图过程之一及其结果:

画rook图过程之一及其结果:

 

实验主要部分代码及注释(附录有工程code下载链接):

#include"mainwindow.h"

#include"ui_mainwindow.h"

//#include

//#include

#include

#include

usingnamespacestd;

MainWindow:

:

MainWindow(QWidget*parent):

QMainWindow(parent),

ui(newUi:

:

MainWindow)

{

ui->setupUi(this);

ui->textBrowser->setFixedWidth(W);

ui->textBrowser->setFixedHeight(W);

}

MainWindow:

:

~MainWindow()

{

deleteui;

}

voidMainWindow:

:

on_closeButton_clicked()

{

close();

}

voidMainWindow:

:

on_drawing1Button_clicked()

{

/*画图1,资料中称该图为atom*/

img=Mat:

:

zeros(W,W,CV_8UC3);

imwrite("../drawing/drawing.jpg",img);

ui->textBrowser->insertHtml("");

/*下面几句为在Qt中常用的延时函数,这里为延时1s,注意主线程中不要采用sleep()等函数

否则会出现意想不到的结果*/

QElapsedTimert;

t.start();

while(t.elapsed()<1000)

QCoreApplication:

:

processEvents();

/*画椭圆1*/

ui->textBrowser->clear();

my_ellipse(img,0);

imwrite("../drawing/drawing1.jpg",img);

ui->textBrowser->append("");

t.start();

while(t.elapsed()<1000)

QCoreApplication:

:

processEvents();

/*画椭圆2*/

ui->textBrowser->clear();

my_ellipse(img,90);

imwrite("../drawing/drawing2.jpg",img);

ui->textBrowser->append("");

t.start();

while(t.elapsed()<1000)

QCoreApplication:

:

processEvents();

/*画椭圆3*/

ui->textBrowser->clear();

my_ellipse(img,45);

imwrite("../drawing/drawing3.jpg",img);

ui->textBrowser->append("");

t.start();

while(t.elapsed()<1000)

QCoreApplication:

:

processEvents();

/*画椭圆4*/

ui->textBrowser->clear();

my_ellipse(img,135);

imwrite("../drawing/drawing3.jpg",img);

ui->textBrowser->append("");

t.start();

while(t.elapsed()<1000)

QCoreApplication:

:

processEvents();

/*画atom的中心实心圆*/

ui->textBrowser->clear();

my_filled_circle(img,Point(W/2,W/2));

imwrite("../drawing/drawing3.jpg",img);

ui->textBrowser->append("");

t.start();

while(t.elapsed()<1000)

QCoreApplication:

:

processEvents();

}

voidMainWindow:

:

on_drawing2Button_clicked()

{

/*画图2,资料中称该图为rook,其实就是一枚国际像棋子*/

img=Mat:

:

zeros(W,W,CV_8UC3);

imwrite("../drawing/drawing.jpg",img);

ui->textBrowser->insertHtml("");

QElapsedTimert;

t.start();

while(t.elapsed()<1000)

QCoreApplication:

:

processEvents();

ui->textBrowser->clear();

my_polygon(img);

imwrite("../drawing/drawing2.jpg",img);

ui->textBrowser->append("");

t.start();

while(t.elapsed()<1000)

QCoreApplication:

:

processEvents();

ui->textBrowser->clear();

rectangle(img,Rect(Point(0,7*W/8),Point(W,W)),Scalar(0,0,255),-1,8);

imwrite("../drawing/drawing2.jpg",img);

ui->textBrowser->append("");

t.start();

while(t.elapsed()<1000)

QCoreApplication:

:

processEvents();

ui->textBrowser->clear();

my_line(img,Point(0,15*W/16),Point(W,15*W/16));

my_line(img,Point(W/4,W/8),Point(W/4,W));

my_line(img,Point(W/2,7*W/8),Point(W/2,W));

my_line(img,Point(3*W/4,W/8),Point(3*W/4,W));

imwrite("../drawing/drawing2.jpg",img);

ui->textBrowser->append("");

t.start();

while(t.elapsed()<1000)

QCoreApplication:

:

processEvents();

 

}

voidMainWindow:

:

my_ellipse(Mat&img,floatangle)

{

cv:

:

ellipse(img,Point(W/2,W/2),Size(3*W/8,W/8),angle,0,360,Scalar(0,255,0),2,8);

}

voidMainWindow:

:

my_filled_circle(Mat&img,Pointcenter)

{

cv:

:

circle(img,center,W/8,Scalar(0,0,255),-1,8);

}

voidMainWindow:

:

my_polygon(Mat&img)

{

intncontours=1;

Pointrook_points[1][20];

rook_points[0][0]=Point(W/4.0,7*W/8.0);

rook_points[0][1]=Point(3*W/4.0,7*W/8.0);

rook_points[0][2]=Point(3*W/4.0,13*W/16.0);

rook_points[0][3]=Point(11*W/16.0,13*W/16.0);

rook_points[0][4]=Point(19*W/32.0,3*W/8.0);

rook_points[0][5]=Point(3*W/4.0,3*W/8.0);

rook_points[0][6]=Point(3*W/4.0,W/8.0);

rook_points[0][7]=Point(26*W/40.0,W/8.0);

rook_points[0][8]=Point(26*W/40.0,W/4.0);

rook_points[0][9]=Point(22*W/40.0,W/4.0);

rook_points[0][10]=Point(22*W/40.0,W/8.0);

rook_points[0][11]=Point(18*W/40.0,W/8.0);

rook_points[0][12]=Point(18*W/40.0,W/4.0);

rook_points[0][13]=Point(14*W/40.0,W/4.0);

rook_points[0][14]=Point(14*W/40.0,W/8.0);

rook_points[0][15]=Point(W/4.0,W/8.0);

rook_points[0][16]=Point(W/4.0,3*W/8.0);

rook_points[0][17]=Point(13*W/32.0,3*W/8.0);

rook_points[0][18]=Point(5*W/16.0,13*W/16.0);

rook_points[0][19]=Point(W/4.0,13*W/16.0);

constPoint*pts[1]={rook_points[0]};

//constPoint**pts=rook_points;//这样定义是不行的,因为rook_points是个常量的二阶指针

intnpts[1]={20};

//用指定颜色填充指定闭合的多边形。

fillPoly(img,pts,npts,ncontours,Scalar(0,255,0),8);

}

voidMainWindow:

:

my_line(Mat&img,Pointstart,Pointend)

{

line(img,start,end,Scalar(0,0,0),2,8);

}

 

  实验总结:

  本次实验的主要时间花在了延时函数的使用上,因为不同操作系统的内核不同,所以使用延时函数时需要小心,一开始使用的延时函数usleep(),总出现莫名其妙的现象,后面在论坛上得到了网友的指点说GUI线程中最好不要使用sleep()系列的函数。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1