hjr-C++:VS2015+OpenCV3.1+Qt5

文章目录


#OpenCV
OpenCV是一个做图像处理的库,可以用C++,Java,Python来写图像处理的程序,比如图像滤波,变换,检测之类的,我们主要用vs2015+OpenCV3.1做图像处理。
##安装

  1. 下载安装OpenCV,需要注意的是OpenCV版本要与vs版本对应,判断方法是\opencv\build\x64\vs数字,数字14对应vs2015,13对应vs2014以此类推,配置环境变量与VS的配置项目属性各种路径。
  2. 新建一个c++空项目,注意是空项目,然后在源文件里建cpp文件,写程序就行了,写程序需要注意include库与引用命名空间,这里的库有两个版本,debug(调试版本)与release(发布版本),简单的区别就是前者运行慢,但更利于调试观察,代码少,偏研究可以选这个,后者运行快,因为进行了很多优化,代码多要求效率可以用这个。
  3. 写完程序运行测试就好了,但是c++如果同时有两个带main函数的cpp源文件会报错,保证同时只有一个带main函数的源文件,其余的先移除。

##程序
写上第一个测试程序

    Mat image = imread("xxx.jpg", 1);//1是一通道,不填默认三通道
	imshow("窗口名",image);//显示图片

再写一个调用电脑摄像头的

	Mat image, outputImg;
	char* window_name = "调用摄像头";
	VideoCapture capture;
	capture.open(0);
	if (capture.isOpened())
	{
		for (;;)
		{
		    cout << "已开启摄像头" << endl;
			capture >> image;
			if (image.empty())
				break;
			imshow(window_name, image);
			if (waitKey(10) >= 0)
				break;
		}
	}
	else
	{
		cout << "没有摄像头" << endl;
		image = Mat::zeros(480, 640, CV_8UC1);
		imshow("Sample", image);
		waitKey(0);
	}

##常用数据结构

  • Mat:图像对象
  • Point2f:二维点 如:Point2f p(2,3)定义一个二维点p,调用p.x和p.y
  • Point3f:三维点 如:Point2f p(2,3,4)定义一个三维点p,调用p.x和p.y和p.z
  • Scalar(B,G,R):颜色表示,注意RGB反着
  • Size:尺寸 如Size(3,5),宽和高为3和5
  • Rect:矩形 如Rect(x,y,width,height),x,y表示矩形左上角点的坐标,后两个表示矩形的宽和高

#Qt
当你写完图像处理项目后你可能想要做一个图形界面,c++可以用MFC比较过时了,所以我们用Qt,Qt有个优势是嵌入式做界面很多都用。顺便说下,Qt和OpenCV都是框架不是语言,仅仅是include库,所以他们都放到一个C++项目里就行。也就是说同一个cpp文件可以同时引用OpenCV和Qt库,可以在一个文件里编程。
##Qt+VS环境配置
需要1.Qt,2.VS在线工具搜索Qt安装插件3.VS

  1. 在这里[https://www.qt.io/download-open-source/]下载Qt
    Qt 版本 for Windows 32/64-bit (VS 版本, xxx MB),注意vs版本对应,Windows系统与位数对应
  2. 然后配置PATH环境变量Qt\Qt5.7.0\5.7\msvc2015_64\bin我的是2015所以msvc2015
  3. VS中安装好Qt插件之后,先点击Qt,Qt option配置路径,路径选到msvx那,名字任意起
  4. 新建项目,选Qt->第一个项目,默认设置,->finish,然后说下Qt项目主要结构

##Qt结构
需要注意,新建项目可能会提示include的文件找不到,不用管,直接正常编译就好,如果还报错,可以把Qt安装文件中的include文件夹整个复制到项目里。

cpp类(包含.h与cpp文件,C++类的写法可以看其他博文)与一个cpp main文件和一个.ui文件,其中main文件不用写啥,主要是打开窗口,.ui文件就是xml文件,当你用Qt Designer控件后ui文件自动生成。

主要的逻辑写到cpp类里,主要有两类,一类获取控件赋值取值,一类是事件处理,获取控件方法:

    ui.label->setText("内容");

ui直接写就行,Label是你拖的控件的objectName,C++方法用->,属性用‘.’。

事件处理用信号与槽,设定信号发送者(控件),信号(比如点击,滑过),接受者(cpp类),槽(cpp类里的方法),其中信号和槽都有默认的选项,如果想自定义槽,可以以如下格式在类里写主要是声明时加上slots

//.h文件声明
private slots:
	 void test();
//类文件实现
void MyClass::imgProcess()
{};

自定义槽写好后,直接在.ui文件里把方法名写上就行了,需要先用默认的生成一下,然后你看一下格式就知道怎么改了。

如果Qt界面中文乱码了,在文件最上面写上这句话,记住只要遇到编码问题都设置成UTF-8:

    # pragma execution_character_set("UTF-8")
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

架构师小侯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值