自己最近刚接到老师的任务,要把一个Python识别云量的代码转化成C++,里面用到的OpenCV我第一次接触,连续爆肝四天之后成功出结果,由于代码需要保密,有问题可以相互学习。我附上自己遇到的问题,以便遇到相同问题需要处理的人查看

OpenCV学习记录:

  1. 别在网页上下载,用迅雷!!!!!!巨快,可以连手机热点,这是下载链接,也可以在迅雷里面用浏览器搜OpenCV:https://udomain.dl.sourceforge.net/project/opencvlibrary/4.6.0/opencv-4.6.0-vc14_vc15.exe
  2. 环境配置到VS看这个人:VS+opencv环境配置傻瓜式教程,一步一步来,没错昂_哔哩哔哩_bilibili;Python配置就去解释器里面添加两个库,自己百度
  3. 第一编辑报错找不到opencv_world401d.dll,去环境变量添加一个:dll的路径,之前添加的是lib的环境变量,现在再加一个:C:\Luo_Software\OpenCV\opencv\build\x64\vc15\bin
  1. 查看RGB还是BGR:验证opencv中图像存储模式是BGR_lh_lyh的博客-CSDN博客
  2. BGR转换RGB:C++ openCV 图像的读取、显示、保存、加权融合、改变对比度、修改色域_花语月的喵喵的博客-CSDN博客_c++opencv读取图片
  3. img[:, 0] 和 img[:, :, 0]、img[:, 1] 和 img[:, :, 1]、img[:, 2] 和 img[:, :, 2]:OpenCV:img[:]、img[:, :]、img[:, 0]、img[:, 1]、img[:, 2]、img[:, :, 0]、img[:, :, 1]、img[:, :, 2]等的理解_despacito,的博客-CSDN博客
  4. 数组维数解释,易懂:python numpy高维数组(三维数组) reshape操作+order详解+numpy高维数组的读法详解_三千の世界的博客-CSDN博客_numpy三维数组
  5. 解释图像的RGB数组含义:python图像三维数组通透理解_贰の⑩次方的博客-CSDN博客_python三维数组怎么理解
  6. Mat用法介绍:C++版本OpenCv教程(二)Mat类构造与赋值_龙啸wyh的博客-CSDN博客_c++ mat赋值
  7. CV_8UC1,CV_32FC3,CV_32S等参数的含义:OpenCV 创建图像时,CV_8UC1,CV_32FC3,CV_32S等参数的含义_Young__Fan的博客-CSDN博客_cv::cv_8uc1
  8. opencv学习日记——CV_8UC1 含义_英雄小摔哥的博客-CSDN博客_cv_8uc1,后者有对应关系Mat数据类型 convertTo_soldier123333的博客-CSDN博客
  9. CV_64FC1和double对应 ,CV_32FC1和float对应;CV_8UC1,CV_8UC2,CV_8UC3等意思_五仁月饼哭了的博客-CSDN博客_cv_8uc1
  10. 查看OpenCV中Mat数据的几种方法_Monologue_的博客-CSDN博客
  11. opencv中图像数组的理解_曹红杏的博客-CSDN博客_opencv图像数组配合OpenCV:img[:]、img[:, :]、img[:, 0]、img[:, 1]、img[:, 2]、img[:, :, 0]、img[:, :, 1]、img[:, :, 2]等的理解_despacito,的博客-CSDN博客相当于一个二维数组,但是这个二维数组中的每个要素都是由RBG三个分量组成的一个小一维数组。看下面这个巨详细:numpy数组切片操作之[:,2]、[-1:,0:2]、[1:,-1:]等都是啥?_Activewaste的博客-CSDN博客去查三维数组切片,很多内容Python二维数组与三维数组切片详解_一骑走烟尘的博客-CSDN博客_三维数组
  12. pycharm来debug查看数据某一维度的信息_爱吃橘子的猫~的博客-CSDN博客查看数组方法
  13. VS调试时查看动态数组的全部元素_ims-的博客-CSDN博客_vs调试查看数组
  14. opencv MAT中维度(dims)和通道(channels)的理解和区别_AndyCheng_hgcc的博客-CSDN博客_mat.dims
  15. opencv颜色通道拆分后显示为什么是灰度图像-CSDN社区
  16. Opencv对彩色图像的每个通道进行处理_行走的算法的博客-CSDN博客_opencv 彩色图像处理
  17. 理解三维矩阵的形状shape,python 三维数组,numpy中np.shape的理解_Codewithyunun的博客-CSDN博客_python shape 三维数组
  18. ( [  [ [1,2,1],[4,5,2 ]],
  19. [ [ 6,7,2],[9,1,2]],
  20. [ [4,6,3],[ 7,8,4]],
  21. [ [7,8],[5,6]] ] )这个的shape就是(4,2,23)我的理解,第一个4表示4行,中间的2表示2列,末尾的3表示每个元素中有两个值;在RGB图像中,最后这个元素就是包含三个值,分表代表r,g,b三个分量,比如我要提取第三个分量就是[:, :, 2]关于python中三维数组的切片问题_要写注释啊的博客-CSDN博客_python三维数组切片
  1. OpenCV矩阵运算:OpenCV矩阵运算总结_落叶知秋了哟的博客-CSDN博客_opencv 矩阵运算!!!!巨方便,比如减法OpenCV函数subtract()使用心得及需要注意的地方_昊虹AI笔记的博客-CSDN博客_opencv subtract除法【OpenCV3】cv::divide()使用详解_PHILOS_THU的博客-CSDN博客解释一下除法的参数OpenCV-Python教程:图像的除法运算(divide)_桔子code的博客-CSDN博客_cv2.divide()
  2. opencv 矩阵每个元素同时除以一个数值opencv 矩阵每个元素同时除以一个数值_百度知道 (baidu.com)第二个回答,配合类型CV_8UC1,CV_8UC2,CV_8UC3等意思_五仁月饼哭了的博客-CSDN博客_cv_8uc1可用:Mat im = read_img(fn);    im.convertTo(I, CV_32F, (1.0/255.0), 0.0);
  3. 向文件中写入数据:可以输出到文件,查看像素值。

//ofstream dataFile;

//dataFile.open("dataFile.txt", ofstream::app);

//fstream file("dataFile.txt", ios::out);

//dataFile << data << endl;     // 写入数据

//dataFile.close();

  1. 使用subtract(b, r, sub1,cv::noArray(), CV_32F);计算矩阵减法,或者有的加法的时候,参数一定要填完整,后面有一个mask淹膜的参数,一定要填,不然有可能全输出0,因为这个淹膜之外的区域才进行操作参考:Opencv图像处理之详解掩膜mask_山水之间2018的博客-CSDN博客add也要填完整add(b, r, add1, noArray(), CV_32F);
  1. 详细解释了OpenCV中Mat结构体的flags参数含义:【OpenCV】从Mat的flags中可以读到的信息,以及相关宏定义_YiYueHuan的博客-CSDN博客
  1. C++想要得到nan值C++ nan() - C++标准库 (programiz.com)
  2. 直方图hist参数:Matplotlib(3、直方图) - plt.hist()参数解释&应用实例_hengheng21的博客-CSDN博客_plt.hist参数
  3. 绘制直方图:OpenCV之直方图绘制(calcHist函数详解)_wendy_ya的博客-CSDN博客_calchist
  4. 直方图参数讲解Opencv中直方图函数calcHist - 凤凰_1 - 博客园 (cnblogs.com)

ranges –   当uniform=true时,ranges是多个二元数组组成的数组;当uniform=false时,ranges是多元数组组成的数组。当在每个维度(或通道)上每个直方条等宽时,即uniform=true时,灰度值的有效统计范围的下界用L0表示,上界用UhistSize[i]-1表示,角标中的i表示第i个维度(或通道),上下界值可以表示为hrange[i]={ L0, UhistSize[i]-1}, 在统计时, L0和UhistSize[i]-1不在统计范围内。而ranges={ hrange[0], hrange[1], …… , hrange[dims]}。ranges的元素个数由参数dims决定。

其中,L0表示在该通道上第0个直方条(bin)的下边界,UhistSize[i]-1表示最后一个直方条histSize[i]-1的上边界。在该维度上直方条的个数为histSize[i],如hrange[0]={ L0, UhistSize[0]},hrange[1]={ L1, UhistSize[1]}, hrange[2]={ L2, UhistSize[2]}, …… , hrange[dims]={ L0, UhistSize[0]}。range,要计算的像素值范围,一般为[0,256)。

  1. 介绍了rectangle画矩形的参数:python-opencv第五期:rectangle函数详解_Kamen Black君的博客-CSDN博客_opencv里面rectangle
  2. C++和Python的imread读取值不一样当用c++opencv和python opencv打开同一张图片,发现有一些像素点不一样的解决办法_龙叙的博客-CSDN博客
  1. 直接输出mat.type(),方便检测mat类型的方法链接里面的表就是返回值,可以根据返回值推断原始mat的类型:Mat::type函数返回值的意义及数据的转换Mat::convertTo_四片叶子的三叶草的博客-CSDN博客

OpenCV零基础从配置环境到读取图片,输出各种灰度腐蚀图,最后输出直方图,做矩阵运算等等相关推荐

  1. JAVA零基础安装教程+环境变量配置

    JAVA零基础安装教程+环境变量配置 JAVA官网 JAVA的下载选择 JAVA的正式安装 JAVA环境变量的配置 JAVA 8的安装包下载 注:嫌麻烦的直接点击 5. JAVA 8的安装包下载,即可 ...

  2. python opencv 实现从一个文件夹中读取图片做切割处理后放入另一个文件夹

    python opencv 实现从一个文件夹中读取图片切割处理后放入另一个文件夹. 实现的功能是把一个文件夹里的图片作处理,即把原图片中心为起点切割成1536*1536的图片,原图片必须大于这个的大小 ...

  3. 【OpenGL】计算机图形学实验一:OpenGL基础实验(实验环境的熟悉、简单图形的绘制和输出)

    实验一:OpenGL基础实验 (实验环境的熟悉.简单图形的绘制和输出) 1.实验目的和要求 学习基本的OpenGL图形绘制和输出函数,掌握使用基于C++  OpenGL开发图形程序的流程. 2.实验设 ...

  4. opencv c艹:配置环境,opencv的数据类型

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

  5. Java基础2——配置环境变量

    一般学习java前要配置好Java的path环境变量和classpath环境变量. 为什么要配置环境变量? 要让exe文件和class文件在任意目录下都能执行,在任意路径下直接敲javac或java ...

  6. OpenCV实践之路——使用imread()函数读取图片的六种正确姿势

    本文由@星沉阁冰不语出品,转载请注明作者和出处. 文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/51375078 微博:http ...

  7. 《Python零基础快乐学习之旅》学习笔记4——基本输入与输出

    第4章 基本输入与输出 4.1 Python的辅助说明help() help()函数可以列出某一个Python的指令或函数的使用说明. >>> help(print) Help on ...

  8. Datawhale 零基础⼊入⻔门CV-Task2 数据读取与扩增

    数据扩增方法 在上一小节中给大家初步介绍了Pillow和OpenCV的使用,现在回到赛题街道字符识别任务中.在赛题中我们需要对的图像进行字符识别,因此需要我们完成的数据的读取操作,同时也需要完成数据扩 ...

  9. Python opencv图像处理基础总结(一) 环境搭建 基础操作

    学过的知识,会过时.会遗忘,但在努力过程中学会的处事态度和做事习惯,都会留在骨子里,变成我们的一部分. Open Source Computer Vision Library,OpenCV于 1999 ...

  10. java中如何实现变量可配置_Java基础-如何配置环境变量

    Java环境变量详细教程 第一步.打开电脑环境变量设置窗口 以Win10系统为例子. 在桌面找到此电脑,右键此电脑- ->属性,点击属性- ->点击左侧高级系统设置 点击高级系统设置 点击 ...

最新文章

  1. linux grep find查找文件夹、代码中的某行/字符串
  2. html旋转墙壁效果,css3实现照片墙效果,鼠标悬浮时旋转放大并摆正
  3. VTK:vtkClipClosedSurface用法实战
  4. aptana studio 汉化与安装 zencoding、spket 配置
  5. 使用CmakeLists应该知道的一些知识
  6. pla3d打印材料密度_口腔修复体制作用3D打印金属粉末的成型工艺与性能控制要点概述...
  7. 列举ospf的5种报文类型_危险品货物各种包装类型以及装箱技巧
  8. 高级ZK:异步UI更新和后台处理–第1部分
  9. UML之一综合设计例题
  10. Portal-Basic Java Web应用开发框架V3.0正式发布(源码、实例及文档)
  11. python怎么使用-如何正确使用Python进行表白
  12. Native Instruments Battery 4 for mac - 尖端鼓采样器
  13. FORM开发实现动态LOV
  14. Delphi的Indy通信中发送流文件的注意事项
  15. 医疗服务系统设计说明书
  16. 如何通过云解析DNS,5步帮你实现邮箱解析
  17. 2021-2027全球与中国高导热陶瓷绝缘基板市场现状及未来发展趋势
  18. 嵌入式开发中三种操作系统的分析与比较
  19. 【联想RQ940】联想RQ940更换主板电池+重新设置BIOS
  20. 蓝桥杯国赛8-JavaA-2-瓷砖样式

热门文章

  1. 微机——微型计算机系统组成及工作原理
  2. undefined和is not defined一样吗?
  3. 【Unity2D】实现人物死亡动画+代码
  4. word 文档密码 html,Word文档密码解决打开方法
  5. 第四讲 Linux常用命令
  6. COLA 4.0应用架构在CSB集成平台的应用实践
  7. lighttpd 之十二 网络请求服务响应流程
  8. Java 两个日期间的天数计算
  9. 【数字电路】期末不挂科复习笔记
  10. 计算机如何永久删除文件无法找回,怎么找回永久删除文件 找回永久删除文件方法【详细步骤】...