当前位置: 首页 > news >正文

《Opencv3编程入门》学习笔记—第二章

《Opencv3编程入门》学习笔记

记录一下在学习《Opencv3编程入门》这本书时遇到的问题或重要的知识点。

第二章 OpenCV 官方例程引导与赏析

openv官方提供的示例程序:具体位于..\opencv\sources\samples\cpp
在这里插入图片描述..\opencv\sources\samples\cpp\tutorial_code路径下存放着和官方教程配套的示例程序

一、opencv OpenCV 官方例程引导与赏析

可以自己动手运行一下官方的示例程序,书上的有的具体地址都没给。

(一)彩色目标跟踪:Camshift

程序的用法是根据鼠标框选区域的色度光谱来进行摄像头读入的视频目标的跟踪。
详见目录:..\opencv\sources\samples\cpp\camshiftdemo.cpp
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(二)光流:optical flow

光流法是目前运动图像分析的重要方法,包含了目标运动信息。
只有官方demo运行图,没有具体地址。
在这里插入图片描述

(三)点跟踪:lkdemo

程序运行后,会自动启用摄像头没,这时按键盘上的"r"键来启动自动点跟踪,便可以看到如图2.7所示的效果图。而我们在摄像头中移动物体,可以看到物体上的点随着物体一同移动,如图2.8所示。
详见目录:..\opencv\sources\samples\cpp\lkdemo.cpp
在这里插入图片描述

(四)人脸识别:Camshift

运行程序,将自己的脸对准摄像头,或者放置一张照片对准摄像头任其捕获,便可以发现程序准确地识别出了人脸,并用彩色的圆将脸圈出。
详见目录:..\opencv\sources\samples\cpp\tutorial_code\objectDetection
还需要将..\opencv\sources\data\haarcascades路径下的haarcascade_eye_tree_eyeglasses.xmlhaarcascade_frontalface_alt.xml复制到和源文件同一目录下,才能正确运行。
相机不好使…效果图如书上所示:
在这里插入图片描述

(五)支持向量机引导

只有官方demo运行图,没有具体地址。
第一个程序是使用CvSVM::train函数训练一个SVM分类器。
在这里插入图片描述
第二个程序主要用于讲解在训练数据线性不可分时,如何定义支持向量机的最优化问题。
在这里插入图片描述

二、开源的魅力:编译OpenCV源代码

(一)下载安装CMake

官网下载地址:https://cmake.org/

在这里插入图片描述
打开:点击快捷方式或进入安装路径D:\software\CMake\bin,找到cmake-gui.exe运行。
在这里插入图片描述

(二)使用CMake生成OpenCV源代码工程的解决方案

  • 点击Browse Source按钮,选择D:/software/opencv/sources(opencv安装时源代码的存储路径)
  • 点击Browse Build按钮,选择D:/programming/opencv/Solution(自定义路径)
  • 点击Configure按钮
    默认选择对应版本的Visual Studio编译器,默认就行(我这里没有vs10,会报错,待解决)
    在这里插入图片描述

在这里插入图片描述
点击finish就会生成对应的VS2010的sln解决方案。
看到进度条读到最后,出现Configuring done就完成了。
在这里插入图片描述

  • 第二次Configure。再次单击Configure按钮
  • 在这里插入图片描述
  • 单击Generate。生成最终的解决方案,出现Configuring done就完成了。解决方案放在第二步我们选择的自定义路径下。
    在这里插入图片描述
    在这里插入图片描述

(三)编译OpenCV源代码

打开"OpenCV.sln"解决方案包含67个项目的解决方案
在这里插入图片描述
可以点击任意一个我们感兴趣的项目,查看源代码并调试。

三、“opencv.hpp”头文件认知

opencv.hpp包含了OpenCV各模块的头文件。

#ifndef __OPENCV_ALL_HPP__
#define __OPENCV_ALL_HPP__#include "opencv2/core/core_c.h"
#include "opencv2/core/core.hpp"
#include "opencv2/flann/miniflann.hpp"
#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/photo/photo.hpp"
#include "opencv2/video/video.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/ml/ml.hpp"
#include "opencv2/highgui/highgui_c.h"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/contrib/contrib.hpp"#endif

四、命名规范约定

代码一定要规范!!!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五 、argc与argv参数疑惑(实际中不怎么使用)

(一)初识main函数中的argc和argv

arg指的是参数

  • ragc为证书,用来统计运行程序时送给main函数的命令行参数的个数;
  • *argv[]:为字符串数组,用来存放指向字符串参数的指针数组,每一个元素指向一个参数。
//官方最标准的main函数写法:
int main(int argc,char *argv[])
{
const char* imagename = argc > 1 ? argv[1] : "lena.jpg";
......
}

(二)argc,argv的具体含义

int main(int argc,char *argv[],char **env)

参数1:int类型的argc,为整型。用来统计运行程序时送给main函数的命令行参数的个数,在Visual Studio中默认值为1。
参数2:char*类型的argv[],为字符串数组,用来存放指向字符串参数的指针数组,各成员含义如下:

  • argv[0]指向程序运行的全路径名
  • argv[0]指向在DOS命令行中执行程序名后的第一个字符串
  • argv[0]指向执行程序名后的第二个字符串
  • argv[0]指向执行程序名后的第三个字符串
  • argv[argc]为NULL

参数3:char **类型的env,为字符串数组。很少用。

(三)Visual Studio中main函数的几种写法说明

1、【写法1】返回值为整型带参的main函数

int main(int argc,char** argv)
{//函数体内使用或不使用argc和argv都可行......return 1;
}

2、【写法2】返回值为整型不带参的main函数

int main(int argc,char** argv)
{//函数体内使用了argc或argv......return 1;
}

3、【写法3】返回值为void且不带参的main函数

int main()
{......return 1;
}

六 、格式输出函数printf()简析

(一)格式输出:printf()函数

int printf(const char *format,...);
即:
int printf("格式控制字符串",输出表列);

printf()函数用于指定输出格式。具体用法如下图所示:
在这里插入图片描述

在这里插入图片描述

(二)示例程序:printf函数的用法示例

示例:

#include <opencv2\opencv.hpp>
using namespace cv;void main()
{int a = 66,b = 88;printf("\n\t%d,%d\n",a,b); //输出十进制整型printf("\n\t%06d,%06d\n",a,b); //输出6位十进制整型printf("\n\t%c,%c\n",a,b); //按字符输出printf("\n\t结果为:a=%d,b=%d",a,b); //可以配合其他内容一同输出getchar(); //等待输出任意字符结束
}

结果图:

在这里插入图片描述

七、智能显示当前使用的OpenCV版本

#include <opencv2\opencv.hpp>
using namespace cv;int main()
{printf("\t当前使用的OpenCV版本为 OpenCV %s",CV_VERSION);getchar();
}

在这里插入图片描述

最后的最后,很喜欢书中的一句话:

授之以鱼,更授之以渔!

相关文章:

《Opencv3编程入门》学习笔记—第二章

《Opencv3编程入门》学习笔记 记录一下在学习《Opencv3编程入门》这本书时遇到的问题或重要的知识点。 第二章 OpenCV 官方例程引导与赏析 openv官方提供的示例程序&#xff1a;具体位于..\opencv\sources\samples\cpp ..\opencv\sources\samples\cpp\tutorial_code路径下存…...

ABP VNext种子数据按顺序插入

ABP VNext种子数据按顺序插入 1.Domain层1.1 新加Author和Book实体1.2 CustomDataSeedDbMigrationService新加方法1.3新加ISowSeed接口1.4 作者和图书种子数据逻辑1.5 新加CustomDataSeedDataSeederContributor 2.EntityFrameworkCore2.1 CustomDataSeedDbContext2.2 生成迁移脚…...

Verilog | FIFO简单实现

FIFO( First Input First Output)简单说就是指先进先出&#xff0c;也是缓存机制的一种&#xff0c;下面是我总结的 FIFO 的三大用途&#xff1a; 1)提高传输效率&#xff0c;增加 DDR 带宽的利用率。比如我们有 4 路视频数据缓存到 DDR 中去&#xff0c;比较笨的方法是&#x…...

设计模式应用场景

设计模式简介 工厂模式&#xff08;Factory Pattern&#xff09;&#xff1a;使用工厂方法创建对象&#xff0c;而不是使用new关键字直接实例化对象。 抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;&#xff1a;提供一个创建一系列相关对象的接口&#xff0c;…...

还在老一套?STM32使用新KEIL5的IDE,全新开发模式RTE介绍及使用

Keil新版本出来了&#xff0c;推出了一种全新开发模式RTE框架( Run-Time Environment)&#xff0c;更好用了。然而网上的教程资料竟还都是把Keil5当成Keil4来用&#xff0c;直接不使用这个功能。当前正点原子或野火的教程提供的例程虽有提到Keil5&#xff0c;但也是基本上当Kei…...

Java时间类(十一) -- Date类工具类 -- Java获取当天、本周、本月、本年 开始及结束时间

目录 1. 今天的日期如下: 2. DateUtils工具类的源代码: 3. 测试类 1. 今天的日期如下:...

Alma Linux 9.2、Rocky Linux 9.2现在是RHEL 9.2的替代品

随着Red Hat Enterprise Linux (RHEL) 9.2的发布&#xff0c;Alma Linux 9.2和Rocky Linux 9.2成为了RHEL 9.2的备选替代品。这两个Linux发行版旨在提供与RHEL兼容的功能和稳定性&#xff0c;以满足那些需要企业级操作系统的用户需求。本文将详细介绍Alma Linux 9.2和Rocky Lin…...

推荐5款提高生活和工作效率的好帮手

在这个数字化时代,软件工具已经深深地影响和改变了我们的生活和工作。有着各种各样的软件工具,它们都可以在特定的领域内让我们变得更加高效,完成复杂的任务。选择一款适合你的软件工具,不但可以极大地释放生产力,也可以让生活变得更加便捷。 1.桌面图标管理工具——TileIconi…...

美团小组长薪资被应届生员工倒挂7K,不把老员工当人?

一位美团的小管理爆出&#xff0c;无意中看到了整个部门薪资&#xff0c;本以为自己算比较高的&#xff0c;但看完之后整个人都傻眼了。小组长的职位月薪28K&#xff0c;而手下组员却是35K&#xff0c;当天晚上抽了一包烟也没想明白是为什么。 楼主表示&#xff0c;自己是美团的…...

【Java多线程案例】使用阻塞队列实现生产者消费者模型

前言 本篇文章讲解多线程案例之阻塞队列。主要讲解阻塞队列的特性、实际开发中常用的到的生产者消费者模型&#xff0c;以及生产者消费者模型解耦合、削峰填谷的好处。并且使用 Java 多线程模拟实现一个生产者消费者模型、阻塞队列版的生产者消费者模型。 文章从什么是阻塞队列…...

Spark 3:Spark Core RDD持久化

RDD 的数据是过程数据 RDD 的缓存 # coding:utf8 import timefrom pyspark import SparkConf, SparkContext from pyspark.storagelevel import StorageLevelif __name__ __main__:conf SparkConf().setAppName("test").setMaster("local[*]")sc SparkC…...

字节跳动五面都过了,结果被刷了,问了hr原因竟说是...

摘要 说在前面&#xff0c;面试时最好不要虚报工资。本来字节跳动是很想去的&#xff0c;几轮面试也通过了&#xff0c;最后没offer&#xff0c;自己只想到几个原因&#xff1a;1、虚报工资&#xff0c;比实际高30%&#xff1b;2、有更好的人选&#xff0c;这个可能性不大&…...

Python日期带时区转换工具类总结

文章目录 1.背景2. 遇到的坑3. 一些小案例3.1 当前日期、日期时间、UTC日期时间3.2 昨天、昨天UTC日期、昨天现在这个时间点的时间戳3.3 日期转时间戳3.4 时间戳转日期3.5 日期加减、小时的加减 4. 总结5. 完整的编码 1.背景 最近项目是国际项目&#xff0c;所以需要经常需要用…...

视频会议产品对比分析

内网视频会议系统如何选择&#xff1f;有很多单位为了保密&#xff0c;只能使用内部网络&#xff0c;无法连接互联网&#xff0c;那些SaaS视频会议就无法使用。在内网的优秀视频会议也有很多可供选择&#xff0c;以下是几个常用的&#xff1a; 1. 宝利通&#xff1a;它支持多种…...

每日一练 | 华为认证真题练习Day47

1、某台路由器输出信息如下&#xff0c;下列说法错误的是&#xff1f;&#xff08;多选&#xff09; A. 本路由器开启了区域认证 B. 本设备出现故障&#xff0c;配置的Router Id和实际生效的Router ID不一致 C. 本设备生效的Router Id为10.0.12.1 D. 本设备生效的Router Id为…...

ChatIE(LLM大模型用于信息抽取)

Zero-Shot Information Extraction via Chatting with ChatGPT paper&#xff1a;https://arxiv.org/abs/2302.10205 利用ChatGPT实现零样本信息抽取&#xff08;Information Extraction&#xff0c;IE&#xff09;&#xff0c;看到零样本就能大概明白这篇文章将以ChatGPT作为…...

提升企业管理效率的利器——ADManager Plus

在当今信息时代&#xff0c;企业的规模和复杂性不断增长&#xff0c;管理各个方面变得愈发具有挑战性。而在企业管理中&#xff0c;活跃目录&#xff08;Active Directory&#xff09;起着至关重要的作用。它是一种用于组织内部的用户、计算机、组和其他对象进行集中管理的目录…...

《入侵的艺术》读书心得:第六章:渗透测试中的智慧与愚昧

第六章&#xff1a;渗透测试中的智慧与愚昧 这些想法是愚昧的 1.任何期待渗透测试结果是“毫无破绽”、“无懈可击”…都是极其愚昧的&#xff1a; 第一层含义&#xff1a;测试的不可穷尽性原理&#xff08;同软件测试&#xff09; 第二层含义&#xff1a;作为优秀甚至只是合…...

SAP-MM-采购申请-价值特性

采购申请审批在维护价值特性时要注意是抬头价值还是行价值&#xff0c;要确定选择哪个&#xff0c;配置时对应配置。 1、创建价值特性CT04 字段名称&#xff1a;CEBAN-GSWRT&#xff0c;和CEBAN-GFWRT 抬头总价值&#xff1a;CEBAN-GFWRT&#xff1b;如果选择的是抬头审批&am…...

设计模式 - 代理模式

基本介绍: 代理模式&#xff1a;为一个对象提供一个替身&#xff0c;以控制对这个对象的访问。即通过代理 对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的 功能操作,即扩展目标对象的功能。被代理的对象可以是远程对象、创建开销大的对象或需要安全控…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...

区块链技术概述

区块链技术是一种去中心化、分布式账本技术&#xff0c;通过密码学、共识机制和智能合约等核心组件&#xff0c;实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点&#xff1a;数据存储在网络中的多个节点&#xff08;计算机&#xff09;&#xff0c;而非…...

ubuntu中安装conda的后遗症

缘由: 在编译rk3588的sdk时&#xff0c;遇到编译buildroot失败&#xff0c;提示如下&#xff1a; 提示缺失expect&#xff0c;但是实测相关工具是在的&#xff0c;如下显示&#xff1a; 然后查找借助各个ai工具&#xff0c;重新安装相关的工具&#xff0c;依然无解。 解决&am…...