热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

opencvc艹:配置环境,opencv的数据类型

配置环境环境变量D:\opencv\opencv3.4\build\x64\vc15\lib新建项目opencv\build\x64\vc15\bin下,复制open

配置环境


  1. 环境变量 D:\opencv\opencv 3.4\build\x64\vc15\lib

  2. 新建项目

  3. opencv\build\x64\vc15\bin下,复制
    opencv_world440.dll
    opencv_world440d.dll
    opencv_videoio_ffmpeg440_64.dll
    三个动态链接库到
    C:\Windows\System32 路径下:

  4. 项目右键,属性。平台 x64 。配置管理器中修改平台 x64 .

  5. 点击VC ++ 目录, 点击包含目录,点击右边的下拉三角形,点击编辑,将如下目录输入即可,
    opencv\build\include
    opencv\build\include\opencv2
    这表示,VC++ 会从此opencv 算法目录调用。

  6. 点击库目录,点击右边的下拉三角形,点击编辑,将如下目录输入即可,
    E:\opencv\build\x64\vc15\lib

  7. 点击链接器,点击输入,点击附加依赖项,点击右边的下拉三角形,点击编辑,将如下目录输入即可,
    opencv_world440d.lib

  8. 测试一下

# include
#includeusing namespace cv;int main(int argc, char** argv) {Mat image = imread("D:\\jupyter-notebook\\opencv\\5.jpg");if (image.empty()) {printf("could not load image...\n");return -1;}//namedWindow("test_opencv_setup", 0);imshow("test_opencv_srtup", image);waitKey(0);return 0;}

opencv 初探


头文件


  • #include “opencv2/core/core.hpp” 结构和数学运算
  • #include“openc2/flann/minflann.hpp" 最近邻搜索匹配函数
  • #include "opencv2/imporc/imgproc.hpp” 图像处理函数
  • #include “opencv2/vide/photo.hpp" 操作和回复照片的相关算法
  • #include “opencv2/video/video.hpp” 视觉追踪和背景分割
  • #include “opencv2/features2d/features2d.hpp” 用于追踪的二维特征
  • #include “opencv2/objdetect/objdetect.hpp” 级联分类器, latent SVM 分类器,HoG特征和平面片检测器
  • #include “opencv2/calib3d/calib3d.hpp” 校准以及双目视觉
  • #include “opencv2/ml/ml.cpp” 机器学习,聚类, 和模式识别有关
  • #include “opencv2/highgui/highgui.hpp” 显示,滚动条,鼠标操作以及输入输出
  • #include “opencv2/contrib/contirb.hpp” 皮肤检测,模糊的Mean-shift 追踪,spin image 算法和自相似特征等。
  • 还有包括了全部的 #include “opencv2/opecv.hpp”

从一个小程序开始:

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include
#include using namespace std;int g_slider_position = 0;
int g_run = 1, g_dontset = 0; //g_run=1 就是每次前进一帧,g_dontset 就是手动拖动滚动条时保持之前的模式
cv::VideoCapture g_cap;void onTrackbarSlide(int pos, void*) {g_cap.set(CV_CAP_PROP_POS_FRAMES, pos); // 回调函数if (!g_dontset) g_run = 1; g_dontset = 0;
}void main()
{cv::namedWindow("Example 2-4", cv::WINDOW_AUTOSIZE);g_cap.open("D:\\opencv\\sources\\samples\\data\\vtest.avi");int frames &#61; (int)g_cap.get(CV_CAP_PROP_FRAME_COUNT); // 读取视频的帧数&#xff0c;宽高int tmpw &#61; (int)g_cap.get(CV_CAP_PROP_FRAME_WIDTH);int tmph &#61; (int)g_cap.get(CV_CAP_PROP_FRAME_HEIGHT);cout << "Video has " << frames << " frames of dimensions("<< tmpw << ", " << tmph << ")." << endl;cv::createTrackbar( // 创建滚动条"Position","Example 2-4",&g_slider_position,frames,onTrackbarSlide);cv::Mat frame;for (;;) {if (g_run !&#61; 0) {g_cap >> frame;if (frame.empty()) break;int current_pos &#61; (int)g_cap.get(CV_CAP_PROP_POS_FRAMES); // 当前的帧数g_dontset &#61; 1;cv::setTrackbarPos("Position", "Example 2-4", current_pos);cv::imshow("Example 2-4", frame);g_run -&#61; 1;}char c &#61; (char)cv::waitKey(10);if (c &#61;&#61; &#39;s&#39;) { // single step g_run &#61; 1;cout << "Single step, run &#61; " << g_run << endl;}if (c &#61;&#61; &#39;r&#39;) { // run modeg_run &#61; -1;cout << "Run mode, run &#61; " << g_run << endl;}if (c &#61;&#61; 27) break;}
}

c艹的代码量真多啊&#xff0c;没啥功能就要那么多行。

作为刚入c&#43;&#43; 深坑的萌新记录一下
argc和argv参数在用命令行编译程序时有用。main( int argc, char* argv[], char **env ) 中
- 第一个参数&#xff0c;int型的argc&#xff0c;为整型&#xff0c;用来统计程序运行时发送给main函数的命令行参数的个数&#xff0c;在VS中默认值为1。
- 第二个参数&#xff0c;char*型的argv[]&#xff0c;为字符串数组&#xff0c;用来存放指向的字符串参数的指针数组&#xff0c;每一个元素指向一个参数。各成员含义如下&#xff1a;
- argv[0]指向程序运行的全路径名
- argv[1]指向在DOS命令行中执行程序名后的第一个字符串
- argv[2]指向执行程序名后的第二个字符串
- argv[3]指向执行程序名后的第三个字符串
- argv[argc]为NULL

命令行中的使用就是&#xff08;WIN&#xff09;&#xff1a;"opencv c艹.exe" D:\opencv\sources\samples\data\vtest.avi

opencv的数据类型


  1. 固定向量类 Vec&#xff0c;用于已知维度的小型向量。相当于列为1 的Matx<> ,cv::Vec{2,3,4,6}{b,s,w,i,f,d}, w 无符号短整型。b 无符号字符型&#xff0c;s 短整型&#xff0c;i int &#xff0c;f,d 浮点类型
    在这里插入图片描述
    可以方便的通过单个数来索引。

  2. Point 类&#xff0c;基本的模板结构表示任何类型的点&#xff08;二维三维&#xff09;。一般通过cv::Point2i cv::Point3f 这样的类型别名实例化&#xff0c;&#xff08;b无符号字符&#xff0c;s 短整型&#xff0c;i 32位整形&#xff0c;f 32位浮点数&#xff0c;d 64位浮点数&#xff0c;可以转换成固定向量类&#xff08;Vec)。
    在这里插入图片描述

  3. Scalar类&#xff0c;相当于(cv::Vec) &#xff0c;成员都是双精度浮点数&#xff0c;继承了向量代数操作&#xff0c;成员访问函数[] &#xff0c;和固定向量类的特性。使用的时候不一定传入四个值吧。。。
    在这里插入图片描述

  4. size 类&#xff0c;cv&#xff1a;&#xff1a;Size. cv&#xff1a;&#xff1a;Size2i. cv&#xff1a;&#xff1a;Size2f &#xff0c;前面两个是一样的。
    在这里插入图片描述
    与point 相比&#xff0c;这个的成员是 width, height &#xff0c;point 中是 x,y 。而且也不能转换成Vec。但point &#xff0c;Vec可以转化成 size类 。

  5. Rect 类 包含了point 的成员 x,y &#xff08;左上角坐标&#xff09;和size的宽高。
    在这里插入图片描述

  6. RotatedRect 类&#xff0c;包含一个 Point2f,&#xff08;中心点&#xff09; Size2f and float 角度&#xff0c;

在这里插入图片描述
7. 固定矩阵 cv::Matx<> &#xff0c;维度要已知。适用于小型数组&#xff08;2*2&#xff0c;3*3&#xff09;&#xff0c;cv&#xff1a;&#xff1a;Matx{1,2&#xff0c;…{1,2&#xff0c;…}{f,d} &#xff0c;数字为1 - 6 。

在这里插入图片描述
在这里插入图片描述
8. 复数类&#xff0c;
在这里插入图片描述
9. cv::TermCriteria 类&#xff0c;封装终止条件的&#xff08;达到迭代次数&#xff0c;达到指定精度&#xff09;TermCriteria( int type, int maxCount, double epsilon )&#xff1b;type:cv::TermCriteria::COUNT or TermCriteria::EPS or | 一起使用

  1. Range类&#xff0c;确定一个连续序列&#xff0c; cv::Range( int start, int end ). Range rng(0,4); rng.size(); rng.empty();

  2. Ptr 模板和垃圾收集&#xff0c;就是指针p 的实例消失后&#xff0c;自动清除这个对象。cv::Ptr p( new cv::Matx33f ), or cv::Ptr p &#61; makePtr() 。得到一个智能指针 p&#xff0c; 可以像标准指针一样使用。但可以记录指向这个实例的个数&#xff0c;当指向实例的指针都释放了&#xff0c;这个实例就可以自动调用析构自动释放。
    addref();release() 增加减少计数&#xff0c;empty() 判断指针释放指向了一个已经倍释放的对象&#xff0c;确定指向的对象是否为NULL 。delete_obj() 引用计数清零时自动执行的函数。

template<> inline void cv::Ptr<FILE>::delete_obj() {fclose(obj);
}
{cv::Ptr<FILE> f(fopen("myfile.txt", "r"));if(f.empty())throw ...; // Throw an exception, we will get to this later on...fprintf(f, ...);...
} // 出来后&#xff0c;f 离开范围计数变0&#xff0c;然后自动调用fclose() .-0

  1. Exception 类和异常处理&#xff0c;继承自std::exception
  2. cv::DataType<> 模板&#xff0c;再opencv函数中需要传递特定数据类型的概念时 &#xff0c;就创建一个datatype<>类型的对象。传递的实际上是这个模板的特化。看不懂&#xff0c;等以后用上了再研究吧。。。

template<typename _Tp> class DataType
{typedef _Tp value_type;typedef value_type work_type; typedef value_type channel_type; // 包含了四个typedef 声明typedef value_type vec_type;enum {generic_type &#61; 1,depth &#61; -1,channels &#61; 1,fmt &#61; 0,type &#61; CV_MAKETYPE(depth, channels)};
};

另一个作用是与更复杂的结构实现交互&#xff0c;比如允许以传入数据类型无关的方式实现算法。

  1. 工具函数&#xff0c;包含数学操作&#xff0c;测试&#xff0c;错误生成&#xff0c;内存和线程处理&#xff0c;优化等其他工具。
    在这里插入图片描述
    在这里插入图片描述
    计数事件时间&#xff0c;前后调用 cv::getTickCount() &#xff0c;然后相减除以 cv::getTickFrequency() 的返回值。

推荐阅读
  • importjava.io.*;importjava.util.*;publicclass五子棋游戏{staticintm1;staticintn1;staticfinalintS ... [详细]
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 本文详细介绍了JQuery Mobile框架中特有的事件和方法,帮助开发者更好地理解和应用这些特性,提升移动Web开发的效率。 ... [详细]
  • MySQL InnoDB 存储引擎索引机制详解
    本文深入探讨了MySQL InnoDB存储引擎中的索引技术,包括索引的基本概念、数据结构与算法、B+树的特性及其在数据库中的应用,以及索引优化策略。 ... [详细]
  • 问题场景用Java进行web开发过程当中,当遇到很多很多个字段的实体时,最苦恼的莫过于编辑字段的查看和修改界面,发现2个页面存在很多重复信息,能不能写一遍?有没有轮子用都不如自己造。解决方式笔者根据自 ... [详细]
  • c语言二元插值,二维线性插值c语言
    c语言二元插值,二维线性插值c语言 ... [详细]
  • 本文详细介绍了如何在Spring框架中设置事件发布器、定义事件监听器及响应事件的具体步骤。通过实现ApplicationEventPublisherAware接口来创建事件发布器,利用ApplicationEvent类定义自定义事件,并通过ApplicationListener接口来处理这些事件。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 本文详细介绍了 `org.apache.tinkerpop.gremlin.structure.VertexProperty` 类中的 `key()` 方法,并提供了多个实际应用的代码示例。通过这些示例,读者可以更好地理解该方法在图数据库操作中的具体用途。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 龙蜥社区开发者访谈:技术生涯的三次蜕变 | 第3期
    龙蜥社区的开发者们通过自己的实践和经验,推动着开源技术的发展。本期「龙蜥开发者说」聚焦于一位资深开发者的三次技术转型,分享他在龙蜥社区的成长故事。 ... [详细]
  • spring boot使用jetty无法启动 ... [详细]
  • 在OpenCV 3.1.0中实现SIFT与SURF特征检测
    本文介绍如何在OpenCV 3.1.0版本中通过Python 2.7环境使用SIFT和SURF算法进行图像特征点检测。由于这些高级功能在OpenCV 3.0.0及更高版本中被移至额外的contrib模块,因此需要特别处理才能正常使用。 ... [详细]
  • Windows操作系统提供了Encrypting File System (EFS)作为内置的数据加密工具,特别适用于对NTFS分区上的文件和文件夹进行加密处理。本文将详细介绍如何使用EFS加密文件夹,以及加密过程中的注意事项。 ... [详细]
author-avatar
mobiledu2502874965
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有