opencv学习笔记[11]:绘图
1.直线
1 #include <cv.h> 2 #include <highgui.h> 3 4 int main() 5 { 6 IplImage *line = cvLoadImage("I:\\资料\\opencv相关资料\\OpenCV教程\\图像与视频\\airplane.png"); 7 CvPoint point1 = cvPoint(100,100); 8 CvPoint point2 = cvPoint(200,200); 9 //float vals[]={}; 10 CvScalar color = cvScalar(0,0,0,0); 11 cvLine(line,point1,point2,color,10); 12 13 cvNamedWindow("test"); 14 cvShowImage("test",line); 15 16 cvWaitKey(); 17 cvReleaseImage(&line); 18 }
2.矩形
1 #include <cv.h> 2 #include <highgui.h> 3 4 int main() 5 { 6 IplImage * rec = cvLoadImage("I:\\资料\\opencv相关资料\\OpenCV教程\\图像与视频\\airplane.png"); 7 CvPoint point1 = cvPoint(100,100); 8 CvPoint point2 = cvPoint(200,200); 9 //float vals[]={}; 10 CvScalar color = cvScalar(0,0,0,0); 11 cvRectangle(rec,point1,point2,color,2); 12 13 cvNamedWindow("test"); 14 cvShowImage("test",rec); 15 16 cvWaitKey(); 17 cvReleaseImage(&rec); 18 }
3.圆形
1 #include <cv.h> 2 #include <highgui.h> 3 4 int main() 5 { 6 IplImage * circle = cvLoadImage("I:\\资料\\opencv相关资料\\OpenCV教程\\图像与视频\\airplane.png"); 7 CvPoint center = cvPoint(200,200); 8 //float vals[]={}; 9 int radius = 100; 10 CvScalar color = cvScalar(0,0,0,0); 11 cvCircle(circle,center,radius,color,-1); 12 13 cvNamedWindow("test"); 14 cvShowImage("test",circle); 15 16 cvWaitKey(); 17 cvReleaseImage(&circle); 18 }
4.椭圆
如下是绘制椭圆的一般方法:
1 #include <cv.h> 2 #include <highgui.h> 3 4 int main() 5 { 6 IplImage * ellipse = cvLoadImage("I:\\资料\\opencv相关资料\\OpenCV教程\\图像与视频\\airplane.png"); 7 CvPoint center = cvPoint(200,200); 8 CvSize axes = cvSize(100,200);//width = 100 height = 200 9 double angle = 0; 10 double start_angle = 0; 11 double end_angle = 360; 12 CvScalar color = cvScalar(0,0,0,0); 13 14 cvEllipse(ellipse,center,axes,angle,start_angle,end_angle,color,5); 15 16 cvNamedWindow("test"); 17 cvShowImage("test",ellipse); 18 19 cvWaitKey(); 20 cvReleaseImage(&ellipse); 21 }
如下是利用外界矩形描绘椭圆的方法:
typedef struct CvBox2D
{
CvPoint2D32f center; /* 盒子的中心 */
CvSize2D32f size; /* 盒子的长和宽 */
float angle; /* 水平轴与第一个边的夹角,用弧度表示*/
}CvBox2D;
1 #include <cv.h> 2 #include <highgui.h> 3 4 int main() 5 { 6 IplImage * ellipsebox = cvLoadImage("I:\\资料\\opencv相关资料\\OpenCV教程\\图像与视频\\airplane.png"); 7 CvPoint center = cvPoint(200,200); 8 CvBox2D box; 9 box.center = cvPoint2D32f(200,200); 10 box.angle = 0; 11 box.size = cvSize2D32f(100,200); 12 CvScalar color = cvScalar(0,0,0,0); 13 14 cvEllipseBox(ellipsebox,box,color,5); 15 16 cvNamedWindow("test"); 17 cvShowImage("test",ellipsebox); 18 19 cvWaitKey(); 20 cvReleaseImage(&ellipsebox); 21 }
5.文字
利用OpenCV进行英文字符串的书写是很容易的。只需要调用cvPutText()函数即可。该函数的申明如下所示:
cvPutText(CvArr* img, const char* text, CvPoint origin, const CvFont* font, CvScalar color);函数中各个参数的含义如下所示:
img---图片指针(需要说明的是,CvArr* 等价于void*,一般我们在这里传递一个IplImage*);
text---显然是需要打印到图片上的字符串的内容;
origin---字符串在图片上打印的原点(即,字符串的左下角在图片中的位置)
font---描述字体属性的变量;
color---字体的颜色;
上面函数中出现了一个较为生僻的变量CvFont*,从名称不难发现,该类型用于进行字符属性的描述;需要刻意提醒的是,CvFont类型的指针并不能像CvMat或 IplImage类型的指针那样,存在一个cvCreate**之类的函数对其进行初始化。CvFont类型变量的初始化是通过函数cvInitFont来实现的;该函数的申明如下所示:
void cvInitFont(CvFont* font, int font_face, double h_scale, double v_scale, double shear=0, int thickness=1, int line_type=8);
该函数中各个变量的含义如下所示:
font---传入及传出的字体属性类型指针;
font_face---表示字体的类型,其取值只能为以下数值之一:
1. CV_FONT_HERSHEY_SIMPLEX
2. CV_FONT_HERSHEY_PLAIN
3. CV_FONT_HERSHEY_DUPLEX
4. CV_FONT_HERSHEY_COMPLEX
5. CV_FONT_HERSHEY_TRIPLEX
6. CV_FONT_HERSHEY_COMPLEX_SMALL
7. CV_FONT_HERSHEY_SCRIPT_SIMPLEX
8. CV_FONT_HERSHEY_SCRIPT_COMPLEX
h_scale---只能为1或0.5,表示水平方向字体的缩放系数;
v_scale---只能为1或0.5,表示垂直方向字体的缩放系数;
shear---取值从0---1,表示字体的倾斜程度,0表示不倾斜,1表示倾斜45度;
thichness, line_type这两个参数同OpenCV的其它绘图函数中定义的一样,表示线型的宽度和线条的类型;
1 #include <cv.h> 2 #include <highgui.h> 3 4 int main() 5 { 6 IplImage * img = cvLoadImage("I:\\资料\\opencv相关资料\\OpenCV教程\\图像与视频\\airplane.png"); 7 char * text ="hello world!"; 8 CvPoint origin = cvPoint(100,150); 9 CvFont font; 10 cvInitFont(&font,CV_FONT_HERSHEY_SIMPLEX,1.0,1.0,0,2); 11 CvScalar color = cvScalar(0,0,0,0); 12 13 cvPutText(img,text,origin,&font,color); 14 15 cvNamedWindow("test"); 16 cvShowImage("test",img); 17 18 cvWaitKey(); 19 cvReleaseImage(&img); 20 }