OpenCv入门(四)-图像处理基本函数02

图像转换

(1) 字节型图像的灰度-彩色转换:

cvConvertImage(src, dst, flags=0);

 src = float/byte grayscale/color image

 dst = byte grayscale/color image

 flags = CV_CVTIMG_FLIP     (垂直翻转图像)

         CV_CVTIMG_SWAP_RB  (置换 R 和 B 通道)

 

(2) 彩色图像->灰度图像:

// Using the OpenCV conversion:

cvCvtColor(cimg,gimg,CV_BGR2GRAY);  // cimg -> gimg

 

// Using a direct conversion:

for(i=0;i<cimg->height;i++)

for(j=0;j<cimg->width;j++)

   gimgA[i][j]= (uchar)(cimgA[i][j].b*0.114 +

                       cimgA[i][j].g*0.587 +

                       cimgA[i][j].r*0.299);

(3) 不同彩色空间之间的转换:

cvCvtColor(src,dst,code); // src -> dst

 code    = CV_<X>2<Y>

 <X>/<Y> = RGB, BGR, GRAY, HSV, YCrCb, XYZ, Lab, Luv, HLS

e.g.: CV_BGR2GRAY, CV_BGR2HSV, CV_BGR2Lab

 

绘图指令

(1) 绘制矩形:

// 在点 (100,100) 和 (200,200) 之间绘制一矩形,边线用红色、宽度为 1

cvRectangle(img, cvPoint(100,100), cvPoint(200,200), cvScalar(0,0,255), 1);

(2) 绘制圆形:

// 圆心为(100,100)、半径为20. 圆周绿色、宽度为1

cvCircle(img, cvPoint(100,100), 20, cvScalar(0,255,0), 1);

(3) 绘制线段:

// 在 (100,100) 和 (200,200) 之间、线宽为 1 的绿色线段

cvLine(img, cvPoint(100,100), cvPoint(200,200), cvScalar(0,255,0), 1);

 

(4) 绘制一组线段:                                                                      

CvPoint  curve1[]={10,10,  10,100,  100,100,  100,10};

CvPoint  curve2[]={30,30,  30,130,  130,130,  130,30,  150,10};

CvPoint* curveArr[2]={curve1, curve2};

int      nCurvePts[2]={4,5};

int      nCurves=2;

int      isCurveClosed=1;

int      lineWidth=1;

 

cvPolyLine(img,curveArr,nCurvePts,nCurves,isCurveClosed,cvScalar(0,255,255),lineWidth);

 

void cvPolyLine( CvArr* img, CvPoint** pts, int* npts, int contours, int is_closed,

                          CvScalar color, int thickness=1, int line_type=8, int shift=0 );

img       图像。

pts       折线的顶点指针数组。

npts     折线的定点个数数组。也可以认为是pts指针数组的大小

contours   折线的线段数量。

is_closed  指出多边形是否封闭。如果封闭,函数将起始点和结束点连线。

color         折线的颜色。

thickness  线条的粗细程度。

line_type  线段的类型。参见cvLine。

shift          顶点的小数点位数

(5) 绘制一组填充颜色的多边形:

cvFillPoly(img,curveArr,nCurvePts,nCurves,cvScalar(0,255,255));

 

cvFillPoly用于一个单独被多边形轮廓所限定的区域内进行填充。函数可以填充复杂的区域,例如,有漏洞的区域和有交叉点的区域等等。

void cvFillPoly( CvArr* img, CvPoint** pts, int* npts, int contours,CvScalar color, int line_type=8, int shift=0 );

img           图像。

pts           指向多边形的数组指针。

npts         多边形的顶点个数的数组。

contours   组成填充区域的线段的数量。

color         多边形的颜色。

line_type  组成多边形的线条的类型。

shift          顶点坐标的小数点位数。

(6) 文本标注:

CvFont font;

double hScale=1.0;

double vScale=1.0;

int    lineWidth=1;

cvInitFont(&font,CV_FONT_HERSHEY_SIMPLEX|CV_FONT_ITALIC, hScale,vScale,0,lineWidth);

 

cvPutText (img,"My comment",cvPoint(200,400), &font, cvScalar(255,255,0));

其它可用的字体类型有: CV_FONT_HERSHEY_SIMPLEX, CV_FONT_HERSHEY_PLAIN, CV_FONT_HERSHEY_DUPLEX, CV_FONT_HERSHEY_COMPLEX, CV_FONT_HERSHEY_TRIPLEX, CV_FONT_HERSHEY_COMPLEX_SMALL, CV_FONT_HERSHEY_SCRIPT_SIMPLEX, CV_FONT_HERSHEY_SCRIPT_COMPLEX,

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值