opencv函数库 opencv函数库是c语言吗

2025-01-04 10:31 - 立有生活网

opencv中cvCvtColor函数在哪个库

1、概况

opencv函数库 opencv函数库是c语言吗opencv函数库 opencv函数库是c语言吗


opencv函数库 opencv函数库是c语言吗


opencv函数库 opencv函数库是c语言吗


cvCvtColor(...),是Opencv里的颜色空间转换函数,可以实现RGB颜色向HSV,HSI等颜色空间的转换,也可以转换为灰度图像。

参数CV_RGB2GRAY是RGB到gray,

参数 CV_GRAY2RGB是gray到RGB.处理结果是彩色的,则转灰色就是了:

void cvCvtColor( const CvArr src, CvArr dst, int code );

src

输入的 8-bit,16-bit或 32-bit单倍精度浮点数影像。

dst

输出的8-bit, 16-bit或 32-bit单倍精度浮点数影像。

code

色彩空间转换的模式,该code来实现不同类型的颜色空间转换。比如CV_BGR2GRAY表示转换为灰度图,CV_BGR2HSV将从RGB空间转换为HSV空间。其中当code选用CV_BGR2GRAY时,dst需要是单通道。当code选用CV_BGR2HSV时,对于8位图,需要将RGB值归一化到0-1之间。这样得到HSV图中的H范围才是0-360,S和V的范围是0-1。

2、函数使用范例

这里给出将RGB图像转换为灰度和HSV的例子:

IplImage src = cvLoadImage("4085_1.jpg",1);//原图

IplImage dst_gray = cvCreateImage(cvGetSize(src),src->depth,1);//灰度图

IplImage dst_image = cvCreateImage(cvGetSize(src),32,src->nChannels);

IplImage src_image_32 = cvCreateImage(cvGetSize(src),32,src->nChannels);

//这两个图需要是32浮点位的,因为对原图进行归一化后得到的是浮点数

cvCvtColor(src,dst_gray,CV_BGR2GRAY);//得到灰度图

cvConvertScale(src,src_image_32,1.0/255.0,0);//将原图RGB归一化到0-1之间

cvCvtColor(src_image_32,dst_image,CV_BGR2HSV);//得到HSV图

opencv的一些函数——contours

image, contours, hierarchy = cv2.findContours(image, mode, mod[, contours[, hierarchy[, offset ]]])

findContours( InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int mod, Point offset=Point());

findContours( InputOutputArray image, OutputArrayOfArrays contours, int mode, int mod, Point offset=Point());

检测轮廓方法(mod):

表示一条轮廓的方法(mod):

void drawContours(InputOutputArray image, InputArrayOfArrays contours, int contourIdx, const Scalar& color, int thickness=1, int lineType=8, InputArray hierarchy=noArray(), int maxLl=INT_MAX, Point offset=Point() )

函数参数详解:

1、获取包围对象的垂直矩阵

2、获取包围对象的小圆

3、获取包围对象的多边形

4、获得包围对象的凸包

原理

5、轮廓中的所有点

一个想法:先取得轮廓,然后新建一个图像,在新图像上画出轮廓以及填充的图像,遍历这幅图像,如果有颜色就是在轮廓内。

另一个方法1

另一个方法2

6、小面积的外接矩形(可倾斜)

minAreaRect(InputArray points);

7、可倾斜椭圆(见上)

fitEllipse(InputArray points);

8、轮廓内连通区域的面积和长度

double contourArea(InputArray contour, bool oriented=false )

double arcLength(InputArray curve, bool closed);

9、判断一个点是否在一个多边形内

pointPolygonTest

double pointPolygonTest(InputArray contour, Point2f pt, bool measureDist)

用于测试一个点是否在多边形中

当measureDist设置为true时,若返回值为正,表示点在多边形内部,返回值为负,表示在多边形外部,返回值为0,表示在多边形上。

当measureDist设置为false时,若返回值为+1,表示点在多边形内部,返回值为-1,表示在多边形外部,返回值为0,表示在多边形上。

10、比较两个形状的相似性

原理: OpenCV提供的一个根据计算比较两张图像Hu不变距的函数,函数返回值代表相似度大小,完全相同的图像返回值是0,返回值是1。这可以用在在一堆照片中搜索出两张相同或相同程度的图像。

double cvMatchShapes(const void object1, const void object2, int mod, double parameter = 0);

opencv3以后不能用的函数

Directory函数。由于opencv3以后的版本缺少contrib函数,opencv3以后不能用的函数是Directory函数,这个函数本来是来得到文件夹目录中的所有特定类型的文件名,所以导致原来那个代码不能使用。

如何将opencv中的库函数提取出来单独使用

首先去opencv的安装路径下modulesobjdetect目录中找到hog的头文件和源代码,然后把里面用到的相关的类,函数等也找出来,单独写成.h和.cpp文件,放到工程里面编译生成dll。不过这个工作量应该相当大,我尝试过把haar检测单独提取出来,但是没成功,里面的各种类的相互关系太复杂了。

请教BCB内使用OpenCV影像函式库

1.Opencv的库是属於VC的。所以即使能正确配置BCB环境,在编译时也会出现连接错误:

[Linker Error] '…bin .lib' contains invalid OMF record, type 0x21 (sibly COFF).

其原因就在於使用了VC的库。

解决方法:

BCB安装目录下BIN中有一个档COFF2OMF.EXE,可用此档把VC的库转换为BCB的库。另外还可以用如下两个档:impdef.exe及implib.exe。

因此,步需要将OpenCV安装目录下LIB中的几个库函数转换为BCB库函数。如:cv.lib、highgui.lib等。

2.配置OpenCV的头档路径。

在BCB环境下,选择project中的options,对话方块,单击Directories/Condtionals标签。

在Directories下的include path中加入OpenCV的头档所在的路径。注意,cv和highgui的头档在不同地方,分别加入。其他类推。在Library path中加入你转换得到的库(BCB)的路径。当然这一步可以不做。可以在3中完成。

3.在BCB工程中加入OpenCV的库。

启动project mar,可以看到已有此工程的几个档。右击工程名,选择ADD,然後选择你要加的库档。通常,要把你程式中用到的库都加进去。

一个人的城市_一个人的城市吉他谱

一个人在陌生城市怎么生活? 没有人依靠的时候就要靠自己啊。 让自己忙起来,天天累的像条狗,什么矫情的感觉都没有。每天上床倒头就睡,附加奖励就是你认真工作的态度会受到身边人的欣赏···

圆周运动教案 圆周运动教案教学过程

您好,今天小周来为大家解答以上的问题。圆周运动教案相信很多小伙伴还不知道,现在让我们一起来看看吧! 圆周运动教案 圆周运动教案教学过程 圆周运动教案 圆周运动教案教学过程 1、高一下册···

破立并举:观念更新与制度完善的双重路径

破立并举是一个汉语成语,意指在打破旧的观念、制度和做法的同时,建立新的观念、制度和做法。它反映了一种辩证的思维方式,强调在变革过程中既要否定旧事物,也要肯定新事物。 破立并举···