![](https://img-blog.csdnimg.cn/20200409135237862.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
学习OpenCV3
书籍:学习OpenCV3
北冥有鱼wyh
当容颜不再,唯学识沉淀;
当看清远方,唯家人、知识与我长伴。
展开
-
学习OpenCV3: 第4章 图像和大型数组类型
1、稠密数组cv::Matcv::Mat构造函数示例默认构造函数cv::Mat构造二维数组cv::Mat(int rows, int cols, int type)cv::Mat(int rows, int cols, int type, const Scalar &s)cv::Mat(int rows, int cols, int type, void *data, size_t step=AUTO_STEP)cv::Mat(cv::Size sz, int ty.原创 2020-07-13 13:53:08 · 351 阅读 · 0 评论 -
学习OpenCV3:=、clone、copyTo的区别
1、=#include <opencv2/opencv.hpp>using namespace cv;#include <iostream>using namespace std;int main(){ Mat img1(300, 300, CV_32FC3, Scalar(1, 0, 0)); Mat img2(200, 200, CV_32FC3, Scalar(0, 1, 0)); Mat roi = img1(Rect(50, 50, .原创 2020-07-13 08:26:09 · 1882 阅读 · 2 评论 -
学习OpenCV3: DataType「Complexf」无法访问成员type和depth
1、背景#include <iostream>using namespace std;#include <opencv2/opencv.hpp>using namespace cv;int main(){ int rows = 5, cols = 5; Mat m = Mat::eye(rows, cols, DataType<Complexf>::type); for (size_t i = 0; i < rows; ++i)原创 2020-07-09 14:21:03 · 531 阅读 · 1 评论 -
学习OpenCV3:OpenCV3.4.10的Scalar无法画出部分对应的颜色
1、背景 现希望在白色背景图片上画出两条平行线,其颜色分别为蓝色和紫色。编写如下程序,发现可以画出蓝线,但画不出紫线。#include <opencv2/opencv.hpp>using namespace cv;int main(){ Mat img(400, 600, CV_32FC3, Scalar(255, 255, 255)); // 白色背景图片 line(img, Point(0, 100), Point(600, 1.原创 2020-07-09 09:57:15 · 740 阅读 · 0 评论 -
学习OpenCV3:第3章 了解OpenCV的数据类型
1、OpenCV的数据类型根据组织结构,OpenCV的数据类型主页分成三类:直接从C=++原语中继承的基本数据类型,如int、float、数组、矩阵等;辅助对象,如垃圾收集指针类、用于数据切片的范围对象、抽象的终止条件等;大型数组类型,如cv::Mat、cv::SparseMat。基本数据类型:cv::Point、cv::Size、cv::Rect、cv::RotateRect、固定矩形类cv::Matx、固定向量类cv::Vec、cv::Scalar。访问成员:cv::Point、cv::Siz.原创 2020-07-08 10:49:21 · 324 阅读 · 0 评论 -
学习OpenCV3:判断两条直线相交,并计算交点和夹角
一、问题 已知两条直线l1(x1,y1,x2,y2)l_1(x_1,y_1,x_2,y_2)l1(x1,y1,x2,y2)和l2(x3,y3,x4,y4)l_2(x_3,y_3,x_4,y_4)l2(x3,y3,x4,y4),现希望判断l1l_1l1与l2l_2l2间是否相交。若相交,计算出两条直线的交点和夹角。二、分析1、直线方程y−y1y2−y1=x−x1x2−x1⇒{ax+by+c=0a=−(y2−y1)b=x2−x1c=(y2−y1)x1−(x2−x1)y1k=−.原创 2020-07-07 09:34:37 · 7655 阅读 · 1 评论 -
学习OpenCV3:画带箭头的直线
一、问题 现有一条直线p1p2p_1p_2p1p2,给定箭头角度angle,长度length,颜色color和厚度thickness,要求在p2p_2p2画出箭头。二、分析: 已知角度angle和长度length,可求出l1和l2: double l1 = length * cos(angle * CV_PI / 180), l2 = length * sin(angle * CV_PI / 180); 已知p1,p2和l1,可求出p0: int i = (p2.x.原创 2020-07-03 17:18:44 · 850 阅读 · 0 评论 -
学习OpenCV3:画出三角形,并计算3个角的大小
一、问题 已知三角形的3个点p0、p1和p2。现希望画出三角形,并计算3个角度的大小。二、分析 直线aaa的直线方程:y−y1y2−y1=x−x1x2−x1⇒{ax+by+c=0a=−(y2−y1)b=x2−x1c=(y2−y1)x1−(x2−x1)y1\frac{y-y_1}{y_2-y_1} = \frac{x-x_1}{x_2-x_1} \Rightarrow \begin{cases} ax+by+c=0 \\a=-(y_2-y_1) \\ b = x_2-x_1 .原创 2020-07-01 15:06:57 · 2494 阅读 · 1 评论 -
学习OpenCV3:画出代表夹角的圆弧
一、问题 已知3个点 g_center、g_p1和g_p2。其中g_center是夹角的中心点,g_center和g_p1组成夹角的起始边l1l_1l1,g_center和g_p2组成夹角的结束边l2l_2l2,现希望画出从l1l_1l1到l2l_2l2的夹角。二、分析 OpenCV中cv::ellipse()不止可以画椭圆,还可以画圆弧。bool ellipse(cv::Mat& img, // 画图的图片cv::Point .原创 2020-07-01 11:00:16 · 2754 阅读 · 0 评论 -
学习OpenCV3:判断两条直线平行,并计算平行距离
一、问题 已知两条直线l1(x1,y1,x2,y2)l_1(x_1,y_1,x_2,y_2)l1(x1,y1,x2,y2)和l2(x3,y3,x4,y4)l_2(x_3,y_3,x_4,y_4)l2(x3,y3,x4,y4),现希望判断l1l_1l1与l2l_2l2间是否平行。若平行,计算出两条直线间的平行距离。二、分析y−y1y2−y1=x−x1x2−x1⇒{ax+by+c=0a=−(y2−y1)b=x2−x1c=(y2−y1)x1−(x2−x1)y1k=−ab\fra.原创 2020-06-30 09:46:19 · 4543 阅读 · 1 评论 -
学习OpenCV3:判断两条直线重合
一、问题 已知两条直线l1(x1,y1,x2,y2)l_1(x_1,y_1,x_2,y_2)l1(x1,y1,x2,y2)和l2(x3,y3,x4,y4)l_2(x_3,y_3,x_4,y_4)l2(x3,y3,x4,y4),现希望判断l1l_1l1与l2l_2l2间是否重合。二、分析 l1l_1l1的直线方程:y−y1y2−y1=x−x1x2−x1⇒{a1x+b1y+c1=0a1=−(y2−y1)b1=x2−x1c1=(y2−y1)x1−(x2−x1)y1\fra.原创 2020-06-27 10:30:01 · 2857 阅读 · 1 评论 -
学习OpenCV3:识别图片倾斜角度并自动旋转
一、背景 现有如下图片,希望能用鼠标画出矩形,在矩形中计算出图片的倾斜角度,并由此自动旋转使图片水平。二、实现源程序:#include <opencv2/opencv.hpp>#include <iostream>#include <string>#include <cmath>using namespace std;using namespace cv;// 全局变量Mat g_image_original, g_image_g.原创 2020-06-18 22:18:09 · 6977 阅读 · 0 评论 -
学习OpenCV3:计算点到直线的距离并画出垂线(含公式和推导)
一、背景 已知一个点p0(x0,y0)p_0(x_0,y_0)p0(x0,y0)和一条直线l1l_1l1。l1l_1l1由起点p1(x1,y1)p_1(x_1,y_1)p1(x1,y1)和终点p2(x2,y2)p_2(x_2,y_2)p2(x2,y2)组成。现希望先计算p0p_0p0在直线l1l_1l1上的垂足p3(x3,y3)p_3(x_3,y_3)p3(x3,y3)并画出垂线l2l_2l2,再计算p0p_0p0到l1l_1l1的距离ddd。当l1垂直x轴时.原创 2020-06-17 21:13:55 · 5197 阅读 · 0 评论 -
学习OpenCV3:在空白图片上画虚线
一、背景 在OpenCV中,可以画圆、线、矩形、椭圆和多边形,但并不能画出虚线,现希望通过OpenCV已有的函数画出由点或线组成的虚线。cv::circle() // 画一个简单圆cv::clipLine() // 判断一条直线是否在给定的矩形内cv::ellipse() // 画一个椭圆,可以倾斜,或者只有部分圆弧cv::ellipse2Poly() // 计算一个近似椭圆的多边形cv::fillConvexPoly() // 画一个填充的简单多边形cv::fillPoly() // 画.原创 2020-06-17 08:32:30 · 6722 阅读 · 1 评论 -
学习OpenCV3:warpAffine旋转图片,鼠标操作截图
1、背景 现有如下一张图片,发现其图案与图片并不平行,故希望先通过滑动条旋转图片角度使图案水平,再将旋转好后的图片截图保存下来。测试图片:2、实现初始版本:实现图片旋转功能。缺陷:旋转时超出图片大小的部分无法显示。#include <opencv2/opencv.hpp>#include <iostream>#include <string>#include <cmath>// 全局变量cv::Mat g_image_origin.原创 2020-06-16 11:35:53 · 452 阅读 · 0 评论 -
学习OpenCV3:形参是Mat,*Mat,&Mat时图片变化情况
#include <opencv2/opencv.hpp>#include <iostream>#include <string>using namespace std;using namespace cv;void draw1(Mat img){ int y = 20; line(img, cv::Point(0, y), cv::Point(img.cols, y), cv::Scalar(255, 0, 0), 2); //画蓝线}.原创 2020-06-11 14:25:55 · 1176 阅读 · 0 评论 -
学习OpenCV3:使用=、clone、copyTo赋值时图片变化情况
#include <opencv2/opencv.hpp>#include <iostream>using namespace std;using namespace cv;int main(){ // 创建一张空白图片img int w = 400, h = 300; Mat img = Mat(h, w, CV_8UC3, Scalar(255, 255, 255)); // 在img1上画蓝线 int y = 50; .原创 2020-06-11 13:44:18 · 313 阅读 · 0 评论 -
学习OpenCV3:创建一张空白的图片并画线
1、背景 在OpenCV中,图片的类型是cv::Mat,而cv::Mat可作为任意维度的数组使用。// 默认构造函数cv::Mat;// 指定类型的二维数组cv::Mat(int rows, int cols, int type);cv::Mat(cv::Size sz, int type);// 指定类型的二维数组,并指定初始值cv::Mat(int rows, int cols, int type, const cv::Scalar&s);cv::Mat(cv::Size .原创 2020-06-10 17:02:08 · 14258 阅读 · 0 评论 -
学习OpenCV3:Assertion failed错误
1、背景 最近编写如下代码,运行时窗口一闪而过,最后终端报出错误Assertion failed (!fixedSize() || ((Mat*)obj)->size.operator()() == _sz) in create。#include <opencv2/opencv.hpp>#include <iostream>#include <string>int main(){ const std::string name = "imag.原创 2020-06-10 16:27:34 · 4591 阅读 · 0 评论 -
学习OpenCV3:增加图片亮度或对比度消除背景模糊字迹
1、背景 现有如下测试图片,希望消除图片背景中的模糊字迹。2、实现 白色是由红绿蓝混合而成,其像素值是(255,255,255)。黑色即什么颜色也没有,其像素值(0,0,0)。实际想要显示的内容为黑色,与模糊字迹区分较明显。方法1: 增加图片对比度,设置一个阈值g_threshold略低于模糊字迹的像素值,使超过g_threshold的模糊字迹变得更白以至于消失,使低于g_threshold的内容减少像素值变得更黑。方法2: 对整张图片增加亮度,使模糊字迹率先消失。#includ.原创 2020-05-22 09:28:38 · 1162 阅读 · 1 评论 -
C++ Primer:查找指定文件夹下指定类型的文件
1、背景 给定一个路径和一种文件类型,查找在该路径下所有该类型的文件。2、实现#include <iostream>#include <io.h>#include <string>#include <set>using namespace std;// 查找路径path下,文件类型为type的所有文件void find_files(const string &path, set<string> &files,原创 2020-05-21 17:28:04 · 1620 阅读 · 0 评论 -
学习OpenCV3:图像被莫名裁减,修改像素值无效?
一、背景 现希望遍历如下测试图片的像素(r,g,b),并修改成黑色(0,0,0)。运行程序发现图片因莫名原因而被裁减,裁减部分的像素值修改无效。测试图片:opencv程序:#include <opencv2\opencv.hpp>int main(){ cv::Mat img = cv::imread("1.jpg", -1); for (int row = 0; row < img.rows; row++) // 行号,相当于y { .原创 2020-05-21 09:25:49 · 363 阅读 · 1 评论 -
学习OpenCV3:第2章 OpenCV初探
1. 头文件// C++风格的结构以及数学运算#include "opencv2/core/core.hpp"// 最邻近搜索匹配函数#include "opencv2/flann/miniflann.hpp"// C++风格的图像处理函数#include "opencv2/imgproc/imgproc.hpp"// 操作和恢复图片相关算法#include "opencv...原创 2020-04-23 11:13:50 · 203 阅读 · 0 评论 -
学习OpenCV3:视频不在镜头中央,且只显示镜头的部分内容?
一、错误描述 使用OpenCV程序打开usb摄像头时,发现其显示的视频内容并不在镜头的正中位置,而只是镜头左上角的一小块区域。// OpenCV程序#include <opencv2/opencv.hpp>#include <string>const std::string name = "Example2_10";int main(){ cv:...原创 2020-04-22 14:33:50 · 701 阅读 · 0 评论 -
学习OpenCV3:第1章 概述
1. OpenCVOpenCV是一个开源的计算机视觉库。OpenCV使用C和C++语言编写。OpenCV使用Git作为版本管理工具,使用Cmake来构建工程。2. 计算机视觉与人类大脑视觉相比,机器视觉系统不存在一个预先建立的模式识别机制,没有自动控制焦距和光圈,不能与多年的经验相联系。计算机只能从相机或硬盘接受栅格状排列的数字。额外场景信息可以帮助我们从传感器的层面改善获取信...原创 2020-04-16 10:12:10 · 287 阅读 · 0 评论 -
VS Code:OpenCV环境配置及运行(g++.exe)
1. 准备VS Code已安装:VS Code:搭建C/C++编译调试运行环境OepnCV已编译:学习OpenCV3:Cmake+MinGW编译OpenCV2. 环境配置 在电脑的环境变量path中添加OpenCV目录。D:\opencv3410\build_mingw\x64\mingw\bin3. VS Code配置 在VS Code中配置如下4个文件。其中c_...原创 2020-04-19 17:49:16 · 1547 阅读 · 1 评论 -
VS Code:OpenCV环境配置及运行(cl.exe)
1. 测试文件OpenCV程序:#include <opencv2/opencv.hpp>#include <opencv2/highgui.hpp>using namespace cv;int main(){ Mat img = imread("1.png"); cv::imshow("image", img); cv::waitK...原创 2020-04-15 09:55:42 · 1363 阅读 · 0 评论 -
VS:在命令行中使用cl.exe编译运行opencv
1. 背景 电脑中已安装VS,并配置好OpenCV。但VS真的太大,打开运行都很费时间,而且每次新建一个简单opencv程序便需要在VS中新建项目,嫌麻烦。故希望直接在命令行输入cl.exe的命令即可编译运行OpenCV程序。用于测试OpenCV程序如下所示:#include <opencv2/opencv.hpp>#include <opencv2/highgui.h...原创 2020-04-14 17:37:39 · 816 阅读 · 0 评论 -
学习OpenCV3:CMake+MinGW编译OpenCV错误(Error in configuration process, project files may be invalid)
1. 错误描述 在使用CMake编译OpenCV时,选择MinGW Makefiles,CMake出现如下错误:CMake Error: CMake was unable to find a build program corresponding to "MinGW Makefiles". CMAKE_MAKE_PROGRAM is not set. You probably need...原创 2020-04-18 11:35:42 · 2154 阅读 · 0 评论 -
学习OpenCV3:Cmake+MinGW编译OpenCV
1. 准备1.1 下载OpenCV源码OpenCV下载地址1:https://opencv.org/releases/OpenCV下载地址2:https://github.com/opencv/opencv/releasesOpenCV下载地址3:https://github.com/opencv/opencv提示:下载地址1和下载地址2可以直接安装OpenCV,其目...原创 2020-04-17 17:11:19 · 2418 阅读 · 2 评论 -
学习OpenCV3:MinGW编译OpenCV到vs_version.rc.obj处出错
1. 错误描述[ 65% ] Building RC object modules/world/CMakeFiles/opencv_world.dir/vs_version.rc.objgcc: error: long: No such file or directoryC:\Mingw-w64\mingw32\bin\windres.exe: preprocessing failed....原创 2020-04-17 16:26:29 · 4778 阅读 · 26 评论 -
学习OpenCV3:Cmake编译OpenCV时无法下载ffmpeg、xfeatures2d等文件
1. 错误描述CMake Warning at cmake/OpenCVDownload.cmake:202 (message): FFMPEG: Download failed: 6;"Couldn't resolve host name" For details please refer to the download log file: D:/opencv/bulid_m...原创 2020-04-17 11:59:53 · 11163 阅读 · 32 评论 -
学习OpenCV3:解决github下载速度慢的方法(码云)
1. 背景 最近在学习OpenCV,需下载源码来搭建环境,但发现有时在github下载项目,其速度太慢甚至中途下载失败。而码云相当于国内版的github,下载速度肯定没有问题,现希望用码云快速下载github项目。2. 实现2.1 登录或注册码云账号2.2 从github导入仓库提示:导入的速度与github项目大小有关。2.3 下载项目...原创 2020-04-17 08:47:30 · 1656 阅读 · 0 评论