help~opencv画的企鹅,但是还有两个问题

opencv画的企鹅~~

 

#include "highgui.h"

#include "cv.h"

 

#define line_type  CV_AA

 

int main()

{

    IplImage* image2;

CvPoint r1,r2,center,p00,p01,p11,p10,pl,pr,ptt[8],*pt[1],org;

CvSize  axes;

CvFont  font;

CvScalar color;

pt[0]=&(ptt[0]); pt[1]=&(ptt[4]); int arr[2];arr[0]=3;arr[1]=4;//详细看下一个粉色标记

//画图初始化

IplImage *image=cvCreateImage(cvSize(600,600),IPL_DEPTH_8U,3);

cvNamedWindow("image",0/*CV_WINDOW_AUTOSIZE*/);

    //background

r1.x=0;

r1.y=0;

r2.x=600;r2.y=600;

cvRectangle(image,r1,r2,CV_RGB(255,255,255),CV_FILLED,line_type,0);

 

//body

center.x=300;center.y=400;

    axes.width=150; axes.height=270;

double angle=0;

double start=0;

double end=180;

color=CV_RGB(0,0,0);

cvEllipse(image,center,axes,angle,start,end,color,CV_FILLED,line_type,0);

axes.height=60; axes.width=130;

angle=180;

cvEllipse(image,center,axes,angle,start,end,color,40,line_type,0);

color=CV_RGB(255,255,255);

axes.height=110;axes.width=110;angle=0;

cvEllipse(image,center,axes,angle,start,end,color,CV_FILLED,line_type,0);

axes.height=63;axes.width=110;angle=180;

cvEllipse(image,center,axes,angle,start,end,color,CV_FILLED,line_type,0);

 

start=0;end=360;//feet

pl.x=220; pl.y=450;

pr.x=380; pr.y=450;

axes.width=35; axes.height=55; angle=40;

color=CV_RGB(200,200,0);

cvEllipse(image,pl,axes,angle,start,end,color,CV_FILLED,line_type,0);

angle=-40;

cvEllipse(image,pr,axes,angle,start,end,color,CV_FILLED,line_type,0);

angle=45;//left hand

axes.height=80; axes.width=20;

start=190; end=370;

pl.x=160; pl.y=310;color=CV_RGB(27,27,27);

cvEllipse(image,pl,axes,angle,start,end,color,CV_FILLED,line_type,0);

angle=-45;//right hand

start=170; end=350;

pl.x=440;

cvEllipse(image,pl,axes,angle,start,end,color,CV_FILLED,line_type,0);

angle=-10;//left eye

axes.height=25;  axes.width=17;

start=0;  end=360;

pl.x=244; pl.y=225;

color=CV_RGB(255,255,255);

cvEllipse(image,pl,axes,angle,start,end,color,1,line_type,0);

pl.x=248; pl.y=220;

cvCircle(image,pl,8,color,CV_FILLED,line_type,0);

pl.x=238; pl.y=235;

cvCircle(image,pl,3,color,CV_FILLED,line_type,0);

angle=10;//right eye

pr.x=356; pr.y=225;

cvEllipse(image,pr,axes,angle,start,end,color,1,line_type,0);

pr.x=352; pr.y=220;

cvCircle(image,pr,8,color,CV_FILLED,line_type,0);

pr.x=362; pr.y=235;

cvCircle(image,pr,3,color,CV_FILLED,line_type,0);

 

//mouth,在这里用到一个三角形做企鹅的“黄色”的嘴

pt[0][2].x=300; pt[0][2].y=263;

pt[0][1].x=272; pt[0][1].y=247;

pt[0][0].x=327; pt[0][0].y=247;

color=CV_RGB(200,200,0);

cvFillPoly(image,pt,arr,1,color,line_type,0);

 

//红色的围巾

center.x=300;center.y=230;

axes.height=70; axes.width=140;

start=210;end=330;angle=0;

color=CV_RGB(255,0,0);

cvEllipse(image,center,axes,angle,start,end,color,30,line_type,0);

pt[1][0].x=240; pt[1][0].y=300;//【问1】这里用一个四边形做围巾,如果不把pt[0][]

pt[1][1].x=233; pt[1][1].y=375;//全部标记为0,则会出错

pt[1][2].x=275; pt[1][2].y=390;//如果保持pt[1][],则企鹅的嘴会变成“红色”

pt[1][3].x=270; pt[1][3].y=310;//如果变成pt[0][],则围巾变成三角形,因为arr[0]=3

pt[0][2].x=0; pt[0][2].y=0;//但若将arr[0]=4,则又会出错。。。

pt[0][1].x=0; pt[0][1].y=0;

pt[0][0].x=0; pt[0][0].y=0;

cvFillPoly(image,pt,arr,2,color,line_type,0);

//所以现在就按这样的程序运行,在结束时会有中断,说是pt被中断

 

//文字,【问2】 我想用和例3-4一样,采用cvSubS做差,这样文字的显示就是变化的,

//但是如果把注释部分打开,则不会出现企鹅,等待几秒钟,

//直接出现“lovepenguin”的字样

cvInitFont(&font,CV_FONT_HERSHEY_COMPLEX,1.5,2.0,0.5,4,line_type);

org.x=260; org.y=80;

//image2=cvCloneImage(image);

//for(int i=0;i<256;i++)

//{

// cvSubS(image2,cvScalarAll(i),image,0);

cvPutText(image,"LovePenguin",org,&font,CV_RGB(255,128,250));

cvShowImage("lovepenguin",image);

// cvWaitKey(1);

//}

 

/*//6*6的坐标轴,帮助确定点坐标,在编程(绘图)的过程中应用

pl.x=0; pl.y=100; pr.x=600; pr.y=100;

cvLine(image,pl,pr,color,1,line_type,0);

pl.x=0; pl.y=200; pr.x=600; pr.y=200;

cvLine(image,pl,pr,color,1,line_type,0);

pl.x=0; pl.y=300; pr.x=600; pr.y=300;

cvLine(image,pl,pr,color,1,line_type,0);

pl.x=0; pl.y=400; pr.x=600; pr.y=400;

cvLine(image,pl,pr,color,1,line_type,0);

pl.x=0; pl.y=500; pr.x=600; pr.y=500;

cvLine(image,pl,pr,color,1,line_type,0);

pl.x=100; pl.y=0; pr.x=100; pr.y=600;

cvLine(image,pl,pr,color,1,line_type,0);

pl.x=200; pl.y=0; pr.x=200; pr.y=600;

cvLine(image,pl,pr,color,1,line_type,0);

pl.x=300; pl.y=0; pr.x=300; pr.y=600;

cvLine(image,pl,pr,color,1,line_type,0);

pl.x=400; pl.y=0; pr.x=400; pr.y=600;

cvLine(image,pl,pr,color,1,line_type,0);

pl.x=500; pl.y=0; pr.x=500; pr.y=600;

cvLine(image,pl,pr,color,1,line_type,0);

*/

cvShowImage("image",image);

cvWaitKey(0);

cvSaveImage("mysmile.jpg",image);

cvReleaseImage(&image);

cvDestroyWindow("lovpenguin");

 

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值