一、创建工程:文件--->新建项目或文件--->Non qt project---->plaine C++ Application.....ios
https://blog.csdn.net/keith_bb/article/details/53470170小程序
二、在.rpo中添加openCV支持函数
INCLUDEPATH += E:/software/opencv-3.4.2/build/install/include/opencv \ E:/software/opencv-3.4.2/build/install/include/opencv2 \ E:/software/opencv-3.4.2/build/install/include LIBS += -L E:/software/opencv-3.4.2/build/install/x86/mingw/bin/libopencv_*.dll
三、main.cppui
#include <iostream> #include <opencv2/core.hpp> #include <opencv2/highgui.hpp> #include <opencv2/imgproc.hpp> using namespace std; using namespace cv; int main() { Mat srcImage = imread("F:/MyCode/test0004.bmp"); if(!srcImage.data) { cout << "image load failure" << endl; return false; } namedWindow("原图像",WINDOW_NORMAL); /* * 一、经过指定的名字,建立一个能够做为图像和进度条的容器窗口。若是具备相同名称的窗口已经存在,则函数不作任何事情。 * 二、调用destroyWindow()或者destroyAllWindows()函数来关闭窗口,并取消以前分配的与窗口相关的全部内存空间。 * 对于代码量不大的简单小程序来讲,咱们彻底没有必要手动调用上述的destroyWindow()或者destroyAllWindows()函数, * 由于在退出时,全部的资源和应用程序的窗口会被操做系统会自动关闭。 * 三、void namedWindow(const string& winname,int flags=WINDOW_AUTOSIZE ); * 第一个参数,const string&型的name,即填被用做窗口的标识符的窗口名称。 * 第二个参数,int 类型的flags ,窗口的标识,能够填以下的值: * WINDOW_NORMAL设置了这个值,用户即可以改变窗口的大小(没有限制) * WINDOW_AUTOSIZE若是设置了这个值,窗口大小会自动调整以适应所显示的图像,而且不能手动改变窗口大小。 */ imshow("原图像",srcImage); Mat grayImage; cvtColor(srcImage, grayImage, CV_BGR2GRAY); //将图像转换为灰度图 namedWindow("灰度图",WINDOW_AUTOSIZE); imshow("灰度图",grayImage); //将图像转换为HSV,采用COLOR_前缀 Mat HSVImage; cvtColor(srcImage, HSVImage, COLOR_BGR2HSV); //将图像转换为HSV图 namedWindow("HSV",WINDOW_AUTOSIZE); imshow("HSV",HSVImage); waitKey(0); return 0; }
void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 );
. InputArray src: 输入图像,能够是Mat类
. OutputArray dst: 输出图像,也能够Mat类
. int code: 转换的代码或标识,即在此肯定将什么制式的图片转换成什么制式的图片
. int dstCn = 0: 目标图像通道数,若是取值为0,则由src和code决定spa
函数的做用是将一个图像从一个颜色空间转换到另外一个颜色空间,可是从RGB向其余类型转换时,必须明确指出图像的颜色通道操作系统
在opencv中,其默认的颜色制式排列是BGR而非RGB。因此对于24位颜色图像来讲,前8-bit是蓝色,中间8-bit是绿色,最后8-bit是红色。常见的R,G,B通道的取值范围为:
. 0-255 :CV_8U类型图片
. 0-65535: CV_16U类型图片
. 0-1: CV_32F类型图片 .net
对于线性变换来讲,这些取值范围是可有可无的。可是对于非线性转换,输入的RGB图像必须归一化到其对应的取值范围来或得最终正确的转换结果,例如从RGB->L*u*v转换。若是从一个8-bit类型图像不通过任何缩放(scaling)直接转换为32-bit浮点型图像,
函数将会以0-255的取值范围来取代0-1的取值范围,因此在使用cvtColor函数以前须要对图像进行缩放以下:code
img *= 1./255;
cvtColor(img, img, CV_BGR2Luv);blog