学习opencv之01

来源:互联网 发布:网络装备诈骗能报警吗 编辑:程序博客网 时间:2024/04/30 19:15

(1)cvScalar的用法

上一页  目 录  下一页

CvScalar

 CvScalar
可存放在1-,2-,3-,4-TUPLE类型的捆绑数据的容器

typedef struct CvScalar
{
double val[4]
}
CvScalar;
/* 构造函数:用val0初始化val[0]用val1初始化val[1], 以此类推*/
inline CvScalar cvScalar( double val0, double val1=0,
double val2=0, double val3=0 );
/* 构造函数:用val0123初始化所有val[0]...val[3] */
inline CvScalar cvScalarAll( double val0123 );
/* 构造函数:用val0初始化val[0],用0初始化val[1],val[2],val[3] */
inline CvScalar cvRealScalar( double val0 );

使用问题:

(1)可以用来保存图像的颜色

 

static const struct {
char* name;
CvScalar value;

colors[] = 
{
{"Red", {0, 0, 255, 0}},
{"Green", {0, 255, 0, 0}},
{"Blue", {255, 0, 0, 0}},
{"Orange", {0, 128, 255, 0}},
{"Yellow", {0, 255, 255, 0}},
{"Purple", {160, 0, 160, 0}},
{"Magenta", {255, 128, 255, 0}},
{"Pink", {202, 202, 255, 0}},
{"Aqua", {222, 238, 77, 0}},
{"Brown", {71, 120, 146, 0}}
};

记得初始化的三种方式,不要弄错了

 

(2)可以获取某个图像的某个像素点的像素值

通过 cvGet2D()等等

(3)cvLine直接绘制在IplImage上面不能绘制成彩色线条的问题

不能,你用了CVLINE()这个函数修改了图像的像素而你IplImage* correspond = cvCreateImage( cvSize( object->width + image->width,object->height), 8, 1 );
这个语句已经把correspond图片定义成8位灰度图像了。之前我用的时候也是困惑了我一阵时间,因为以前一直是用NI的图像,在灰度图上也能画出颜色的线条,后面才知道NI是在DC上面画线的,而DC不是图像中的像素,没修改到图像中的像素,相当于在图片上面“漂浮”的另外一层所以能显示出颜色了,而cvline直接修改了图片里面的像素。在计算机领域中,灰度数字图像是每个像素只有一个采样颜色的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑色与白色两种颜色;灰度图像在黑色与白色之间还有许多级的颜色深度。但是,在数字图像领域之外,“黑白图像”也表示“灰度图像”,例如灰度的照片通常叫做“黑白照片”。在一些关于数字图像的文章中单色图像等同于灰度图像,在另外一些文章中又等同于黑白图像。所以你画出的线就是灰度线条了,也就相当于“黑白线条”了