0
点赞
收藏
分享

微信扫一扫

本科毕设知识点2

腊梅5朵 2022-05-03 阅读 84
opencv

1.OpenCV中预定义的宏

OpenCV里面有很多CV_EVENT_LBUTTONDOWN这样大写的,这些是预先定义的宏。
CV_ :这是Opencv的标志,表明这个宏不是windows宏,是opencv定义的。
EVENT_ :表示是一个事件中要用的。
flag: 代表拖拽事件。

CV_EVENT_MOUSEMOVE =0,//滑动
CV_EVENT_LBUTTONDOWN =1,//左键点击
CV_EVENT_RBUTTONDOWN =2,//右键点击
CV_EVENT_MBUTTONDOWN =3,//中键点击
CV_EVENT_LBUTTONUP =4,//左键放开
CV_EVENT_RBUTTONUP =5,//右键放开
CV_EVENT_MBUTTONUP =6,//中键放开
CV_EVENT_LBUTTONDBLCLK =7,//左键双击
CV_EVENT_RBUTTONDBLCLK =8,//右键双击
CV_EVENT_MBUTTONDBLCLK =9//中键双击

CV_EVENT_FLAG_LBUTTON =1,//左键拖曳
CV_EVENT_FLAG_RBUTTON =2,//右键拖曳
CV_EVENT_FLAG_MBUTTON =4,//中键拖曳
CV_EVENT_FLAG_CTRLKEY =8,//按CTRL
CV_EVENT_FLAG_SHIFTKEY =16,//按SHIFT
CV_EVENT_FLAG_ALTKEY =32//按ALT

2.遇到的问题

(1)无法打开源文件
依次点击“项目——配置属性——C/C++——常规”,在“附加包含目录”中加入.h文件所在的文件夹路径
(2)无法打开文件“XXX.lib”
方法1:依次点击“项目——配置属性——链接器——常规”,在“附加库目录”中加入.lib所在的文件夹的路径
方法2:在“链接器”中找到“输入”,在“附加依赖项”中加入需要加入的xxx.lib;(要用;和其他链接库分隔开)

.lib是一种文件名后缀,代表的是静态数据连接库,在windows操作系统中起到链接程序和函数(或子过程)的作用。

3.JVM、JRE、JDK

与 Java 语言相关的名词,初期必须掌握的有三个:

JVM:Java Virtual Machine 的缩写,Java虚拟机。作用是:运行 Java 字节码文件。

JRE:Java Runtime Environment 的缩写,Java运行环境。作用是:运行 Java 程序所必须的环境的集合,包含 JVM 标准实现及 Java 核心类库。

JDK:Java Development Kit 的缩写,Java 语言的软件开发工具包(SDK,Software Development Kit)。作用是:JDK 是整个 Java 开发的核心,它包含了Java 的运行环境(JVM + Java 系统类库)和 Java 工具。

它们三个的关系是:JDK包含JRE,JRE包含JVM。

JDK 为了使用于不同的环境,所以有多个不同的版本。它们分别是:
Java SE,Standard Edition,标准版,是通用的一个版本。
Java EE,Enterprise Edition,企业版,使用这种 JDK 开发 Java EE 应用程序。
Java ME,Micro Edition,主要用于移动设备、嵌入式设备上的 Java 应用程序。

4.OpenCV的Rect矩形类简介和使用

//如果创建一个Rect对象rect(100, 50, 50, 100),那么rect会有以下几个功能:
rect.area(); //返回rect的面积 5000
rect.size(); //返回rect的尺寸 [50 × 100]
rect.tl(); //返回rect的左上顶点的坐标 [100, 50]
rect.br(); //返回rect的右下顶点的坐标 [150, 150]
rect.width(); //返回rect的宽度 50
rect.height(); //返回rect的高度 100
rect.contains(Point(x, y)); //返回布尔变量,判断rect是否包含Point(x, y)点

//还可以求两个矩形的交集和并集
rect = rect1 & rect2;
rect = rect1 | rect2;

//还可以对矩形进行平移和缩放
rect = rect + Point(-100, 100); //平移,也就是左上顶点的x坐标-100,y坐标+100
rect = rect + Size(-100, 100); //缩放,左上顶点不变,宽度-100,高度+100

//还可以对矩形进行对比,返回布尔变量
rect1 == rect2;
rect1 != rect2;

5.C++ vector用法

在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结。
基本操作:
(1)头文件#include.
(2)创建vector对象,vector vec;
(3)尾部插入数字:vec.push_back(a);
(4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。
(5)使用迭代器访问元素.
vector::iterator it; //iterator 迭代器,迭代程序;
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<endl;
(6)插入元素: vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;
(7)删除元素: vec.erase(vec.begin()+2);删除第3个元素 vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始
(8)向量大小:vec.size();
(9)清空:vec.clear();
另外:
vector的元素不仅仅可以使int,double,string,还可以是结构体,但是要注意:结构体要定义为全局的,否则会出错。

6.rectangle
函数是用来绘制一个矩形框的,通常用在图片的标记上。

rectangle(img2, Point(j,i), Point(j + img4.cols, i + img4.rows), Scalar(255, 255, 0), 2, 8);

参数解释:
img2:要做处理的图片
二三代表左上右下矩形的角坐标
scalar:颜色
2代表线条宽度
8是线型,默认取8

Rect函数也是画矩形的,但与上面的有所不同
Rect(x,y,width,height),x, y 为左上角坐标, width, height 则为长和宽。

7.图像变换函数

void flip(InputArray src, OutputArray dst, int flipCode)

图像变换函数,第三个参数为1时,表示水平反转,0表示垂直反转,负数表示既有水平又有垂直反转。

8.OpenCV中的浅拷贝

为介绍OpenCV中的浅拷贝,我们还是从cv::Mat说起吧。cv::Mat类是用于保存图像以及其他矩阵数据的数据结构。
当cv::Mat实例化后,分配内存;当对象离开作用域后,分配的内存自动释放。cv::Mat实现了引用计数以及浅拷贝。
引用计数的作用是只有当所有引用内存数据的对象都被析构后,内存才会释放。浅拷贝是指当图像之间进行赋值时,图像数据并未发生复制,而是两个对象都指向同一块内存块。

9.opencv中namedWindow( )函数用法总结

第一步,功能说明:namedWindow()的功能就是新建一个显示窗口。可以指定窗口的类型。
第二步,API详解:原型:void nameWindow(const string& winname,int flags = WINDOW_AUTOSIZE) ;
参数1:新建的窗口的名称。自己随便取。
参数2:窗口的标识,一般默认为WINDOW_AUTOSIZE 。
WINDOW_AUTOSIZE 窗口大小自动适应图片大小,并且不可手动更改。
WINDOW_NORMAL 用户可以改变这个窗口大小
WINDOW_OPENGL 窗口创建的时候会支持OpenGL
第三步,代码展示:

#include <opencv2/opencv.hpp>
using namespace cv; 
int main()
{
	Mat img;
	img = imread("image3.jpg",1);//参数1:图片路径。参数2:显示原图

	namedWindow("窗口1",CV_WINDOW_NORMAL);
	/*注释
	参数1:窗口的名字
	参数2:窗口类型,CV_WINDOW_AUTOSIZE 时表明窗口大小等于图片大小。不可以被拖动改变大小。
	CV_WINDOW_NORMAL 时,表明窗口可以被随意拖动改变大小。
	*/
 
	imshow("窗口1",img);//在“窗口1”这个窗口输出图片。
	waitKey(5000);//等待5秒,程序自动退出。改为0,不自动退出。
	return 0;
 }
举报

相关推荐

0 条评论