- 博客(119)
- 资源 (6)
- 收藏
- 关注
原创 Bresenham算法原理及c代码实现各方向画线
写在前面应用场景:Bresenham算法是图象图形学中的经典算法,在图形渲染、图像画线都会用到它,非常非常著名。特点:原理简单(思想很伟大),计算高效,没有浮点型运算,很适合在硬件实现。这样一个经典、强大的算法还是十分值得学习和记录的!算法原理从数学的角度,建立一个坐标系,当我们在坐标系中画一条线时,这条线上的值(坐标的连续的);但是计算机中的图像是以一个一个像素组成的,是一个又一个的小格子,那么在图像上已知起点和终点画一条线,这条线就是由一个一个格子组成的,Bresenham算法.
2020-09-07 20:50:02
4705
转载 1分钟解决git clone 速度慢的问题
办法使用国内镜像,目前已知Github国内镜像网站有github.com.cnpmjs.org和git.sdut.me/。速度根据各地情况而定,在clone某个项目的时候将github.com替换为github.com.cnpmjs.org即可。示例//这是我们要clone的git clone https://github.com/Hackergeek/architecture-samples //使用镜像git clone https://github.com.cnpmjs.o.
2020-08-29 21:38:22
438
原创 c++ string转char* 乱码问题全面解决
C++提供了两个函数:c_str()和data()当处理较短的string时,直接调用这两个函数没有出现问题,调用格式如下:std::string str = "Hello Word";char* p1 = str.c_str();char* p2 = str.data();但是,当字符串比较长时,采用这两个函数,转换出来的char* 出现乱码,采用下边这种方式是完全没问题的,故记录在此:char * strc = new char[strlen(str.c_str())+1];s
2020-08-26 18:50:47
8839
4
原创 项目【MFC】(四)——鼠标滚轮缩放图像
初始状态:放大后:功能: 鼠标需放在图片控件窗口,然后通过滚轮实现图片缩放,并实时显示当前分辨率和缩放倍数。实现:1、首先需要判断,鼠标是否停留在图片窗口,若是则响应滚轮事件;否则不响应。2、判断是缩小,还是放大。3、缩放时按一定步长缩放,步长可为:0.01,0.02.....等等。4、显示更新分辨率、缩放倍数。选中控件右击——>选择【类向导】——》【消息选择】->【滚轮】。如下:然后跳转至消息代码,添加程序://...
2020-08-07 20:36:42
8006
6
原创 项目【MFC】总结(三)——图像灰度化/彩色化
关于界面左边的按钮事件 “上一帧”、“下一帧”、“跳转至”以及三个“编辑框显示”的功能比较简单,这里就不在记录了。需要注意的是,变量命名一定要规范,这样自己就不容易混乱。比如,原始读入的图像为Img,当前帧为Current_Img,调整帧号为Goto_farme_num等。这一次记录一下右边的【彩色化】和【灰度化】功能,可能更加偏向图像方面而非MFC了。灰度化 /彩色化很简单,灰度化就是将读入的图像直接显示,这里涉及到数组转图像(Vector->Mat)。数组转图像代码如下:..
2020-08-07 19:53:08
1380
1
原创 项目MFC总结(二)——读取CSV文件将数据转化为图像显示在图片控件
功能点击【打开文件】按钮,选择文件打开,将数据处理为图像(默认处理第10帧开始),然后将图像显示在图片控件。注:整个项目有关图像处理的操作基本用OpenCV实现。读取文件实现1、添加按钮控件在窗口界面,将控件拖进即可,控件在【view】->【TOOL Box】中。2、鼠标右击更改点击【属性】更改属性可更改:名称(Caption)ID(最好按功能名更改):如打开文件可命名为IDC_BUTTON_OPENFILE。其他按自己的需求3、添加点击响应事件选.
2020-08-06 21:03:20
3102
原创 项目MFC总结(一)——开篇
工作项目需要弄一个简单的界面,由于2年多前用过MFC,所以选择MFC做,这次的环境是WIN+VS2013+MFC+OpenCV3.这次写博客的目的是为了记录一下开发的过程,也相当于是一个笔记吧,可以寄随时查看,以防以后忘记。后面会写一个MFC+OpenCV的图像处理软件开发全过程。本次的需求1.通过读文件读取触摸点数据。2.将触摸点的数据(二维)用图像显示:彩色、灰度。3.能用鼠标移动图像,滚轮缩放图像,能框选图像中的局部并弹出局部的触摸数据(且缩放不能影响数据显示)。4.能选取上一
2020-08-06 20:34:32
789
原创 windows/ubuntu下访问Github图像加载失败解决方法
一、Windows下解决方法:修改hosts文件具体步骤参考:https://blog.csdn.net/qq_38232598/article/details/91346392亲测有效!!!二、Ubuntu下按下ctrl+alt+T打开命令终端,输入:nslookup github.com按下ctrl+alt+T打开命令终端,再输入:nslookup github.global.ssl.fastly.net写入hosts文件,刷新缓存按下ct..
2020-05-14 14:16:50
659
3
原创 Task02几何变换
Datawhale 计算机视觉基础-图像处理(上)-Task02 几何变换2.1 简介该部分将对基本的几何变换进行学习,几何变换的原理大多都是相似,只是变换矩阵不同,因此,我们以最常用的平移和旋转为例进行学习。在深度学习领域,我们常用平移、旋转、镜像等操作进行数据增广;在传统CV领域,由于某些拍摄角度的问题,我们需要对图像进行矫正处理,而几何变换正是这个处理过程的基础,因此了解和学习几何变换也...
2020-04-13 01:31:28
599
原创 Task05阈值分割/二值化
Datawhale 计算机视觉基础-图像处理(上)-Task05 图像分割/二值化5.1 简介该部分的学习内容是对经典的阈值分割算法进行回顾,图像阈值化分割是一种传统的最常用的图像分割方法,因其实现简单、计算量小、性能较稳定而成为图像分割中最基本和应用最广泛的分割技术。它特别适用于目标和背景占据不同灰度级范围的图像。它不仅可以极大的压缩数据量,而且也大大简化了分析和处理步骤,因此在很多情况下,...
2020-04-12 22:49:11
1269
原创 Task04图像滤波
Datawhale 计算机视觉基础-图像处理(上)-Task04 图像滤波4.1 简介图像的实质是一种二维信号,滤波是信号处理中的一个重要概念。在图像处理中,滤波是一种非常常见的技术,它们的原理非常简单,但是其思想却十分值得借鉴,滤波是很多图像算法的前置步骤或基础,掌握图像滤波对理解卷积神经网络也有一定帮助。4.2 学习目标了解图像滤波的分类和基本概念理解均值滤波/方框滤波、高斯...
2020-04-12 17:17:59
725
原创 剑指offer系列——替换空格
前言刷题平台:牛客网语言:C++题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。1、思路最简单的方法就是从头到尾遍历,但是时间复杂度为O(n^2)。本文采用一种时间复杂度为O(n)的方法。我们可以先遍历一次字符串,这样就可以统计出字符串空格的总...
2020-02-24 15:02:38
211
原创 剑指offer系列——二维数组中的查找
前言刷题平台:牛客网语言:C++题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。1、思路首先选取数组中右上角的数字。如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数组,剔除这个数字所在的列;如果...
2020-02-24 14:44:21
196
转载 mwArray和cv::Mat互相转化函数
最近用C++/OpenCV调用MATLAB函数,有必要专门把这两个函数拿出来记录一下。需要注意的是,Mat2mwArry函数的输入Mat类型是 CV_64FC1,灰度图。如果要传递多通道图像的话,需要先cv::split()成多个灰度图像分别传给matlab。mwArray2Mat的返回Mat的类型是CV_64FC1,可以通过cv::Mat::convert()转化成所需要的类型...
2019-11-19 22:13:24
1477
转载 用Matlab画外接矩形——Regionprops函数详解:度量图像区域属性
Regionprops:用途是get the properties of region,即用来度量图像区域属性的函数。语法:STATS = regionprops(L,properties)描述:测量标注矩阵L中每一个标注区域的一系列属性。L中不同的正整数元素对应不同的区域,例如:L中等于整数1的元素对应区域1;L中等于整数2的元素对应区域2;以此类推。返回值STATS是一个长度为max(...
2019-11-19 22:06:43
6091
1
转载 如何在C++程序(工程)中调用Matlab函数
C++调用Matlab主要有两种方式,一种是调用Matlab的计算引擎,即调用Matlab本身;另一种是调用matlab中由mcc编译生成的dll文件,这种方法是Matlab利用C++ Complier将m文件转化为C++源码,产生能够完全脱离Matlab运行环境独立执行的DLL程序,从而能够在C++程序中调用DLL实现对Matlab代码的利用。不过,需要说明的是,C++的编译速度是要比Mat...
2019-11-19 21:57:27
6754
3
转载 OpenCV基础——IplImage中的widthStep
IplImage有两个属性容易导致错误:width和widthStep前者是表示图像的每行像素数,后者指表示存储一行像素需要的字节数。在OpenCV里边,widthStep必须是4的倍数,从而实现字节对齐,有利于提高运算速度。如果8U单通道图像宽度为3,那么widthStep是4,加一个字节补齐。这个图像的一行需要4个字节,只使用前3个,最后一个空着。也就是一个宽3高3的图像的...
2019-10-16 20:31:32
877
转载 OpenCV基础——cv::Mat::step
说在前面关于opencv的Mat类step的问题是我2019秋招找工作笔试时遇到的,平时没有注意这些细节,所以也没有答出来,简历上却写着熟悉opencv,我着实感到非常羞愧,所以从这篇文章开始记录有关opencv的基础细节问题。这些细节不一定在工作中能时常用到,但在某一个关键时间点却可能突然出现,打得自己措手不及,所以这些细节是一定要注意的。我不准备刻意地去搜集这些细节,一是这些基础细节实在太...
2019-10-16 20:17:12
2729
转载 机器学习——K-means算法
K-Means算法是无监督的聚类算法,它实现起来比较简单,聚类效果也不错,因此应用很广泛。K-Means算法有大量的变体,本文就从最传统的K-Means算法讲起,在其基础上讲述K-Means的优化变体方法。包括初始化优化K-Means++, 距离计算优化elkan K-Means算法和大数据情况下的优化Mini Batch K-Means算法。1. K-Means原理初探 K-Mea...
2019-08-29 08:23:30
990
转载 机器学习——ANN(BP神经网络)
1 反向传播算法和BP网络简介误差反向传播算法简称反向传播算法(即BP算法)。使用反向传播算法的多层感知器又称为BP神经网络。BP算法是一个迭代算法,它的基本思想为:(1)先计算每一层的状态和激活值,直到最后一层(即信号是前向传播的);(2)计算每一层的误差,误差的计算过程是从最后一层向前推进的(这就是反向传播算法名字的由来);(3)更新参数(目标是误差变小)。迭代前面两个步骤,直...
2019-08-28 13:47:41
3135
转载 机器学习—K近邻(KNN)
算法概述1、kNN算法又称为k近邻分类(k-nearest neighbor classification)算法。最简单平凡的分类器也许是那种死记硬背式的分类器,记住所有的训练数据,对于新的数据则直接和训练数据匹配,如果存在相同属性的训练数据,则直接用它的分类来作为新数据的分类。这种方式有一个明显的缺点,那就是很可能无法找到完全匹配的训练记录。kNN算法则是从训练集中找到和新数据最接近的k...
2019-08-27 10:59:35
494
原创 机器学习—初窥支持向量机(SVM)
前言SVM算法在在1995年正式发表,在针对中小型数据规模的分类任务上有着卓越的效果,同时有着完整的理论证明,在20世纪末的几年和21世纪初的10年完胜神经网络,吴恩达在其2003年的《Machien learning》公开课上用两节课的时间对其进行讲解,而神经网络讲解了20min左右。就是这个算法把神经网络按在地上摩擦了大概15年的时间,直到深度学习的兴起。但即便这样,现在SVM算法依旧被广...
2019-08-26 16:37:46
1431
转载 【面试题】——C++ vector和list的区别
C++ vector和list的区别1.vector数据结构vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。因此能高效的进行随机存取,时间复杂度为o(1);但因为内存空间是连续的,所以在进行插入和删除操作时,会造成内存块的拷贝,时间复杂度为o(n)。另外,当数组中内存空间不够时,会重新申请一块内存空间并进行内存拷贝。2.list数据结构list是由双向链表实现的...
2019-08-25 09:39:41
406
转载 剑指offer系列——指针常量和常量指针的区别(Const加在指针不同位置的区别)
1.常量指针定义:具有只能够读取内存中数据,却不能够修改内存中数据的属性的指针,称为指向常量的指针,简称常量指针。声明:const int * p;int const * p;注:可以将一个常量的地址赋值给一个对应类型的常量指针,因为常量指针不能够通过指针修改内粗数据。只能防止通过指针引用修改内存中的数据,并不保护指针所指向的对象。2.指针常量定义:指针常量是指指针所指向的位置不...
2019-07-24 17:53:24
336
转载 剑指offer系列——C++成员变量初始化顺序
刚开始浏览《剑指offer》,书中举了一个面试者的例子:对方声称精通C++,却不清楚C++成员变量初始化顺序。说实话,我也不清楚,看了《C++ primer》书中作了简短介绍,然而我并没有记住。怕面试被问到,所以在网上搜索一波,总结一下。博客来源:https://blog.csdn.net/zhaojinjia/article/details/8785912由于面试题中,考官出了一道简...
2019-07-24 17:23:18
174
原创 C++_Primer第五版—第八章—练习8.13—使用ostringstream
#include <iostream>#include <sstream>#include <fstream>#include <string>#include <vector>#include <cctype>using std::vector; using std::string; using std::c...
2019-07-22 16:44:13
150
原创 非常实用方便快捷的批量重命名软件——ReNamer Lite
重命名工具有很多,总体来说大同小异,要是能熟练一个,还是很能提高效率的。今天给大家介绍一款功能强大、免费的重命名工具:ReNamer Lite。别被它的名字Lite给欺骗了,功能非常强大。下载地址:http://www.den4b.com/products/renamer 支持简体中文 支持Windows 98以后的系统 支持正则表达式和PascalScript以上转自:https:/...
2019-07-14 15:17:17
7685
4
原创 WIN10下安装LableImg步骤及常见问题解决
基本步骤:可参考:https://blog.csdn.net/HuaCode/article/details/79710748 或https://blog.csdn.net/HuaCode/article/details/79710748以上博客的步骤都是没有错的,只是不同的电脑、环境可能会出现不同问题。问题1:安装lxml 出现"You are using pip v...
2019-07-14 13:36:06
1235
3
原创 C++_Primer第五版—第四章—4.7节-位运算符练习
//练习4.21#include <iostream>#include <vector>void main(){ std::vector<int> a{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0 ,11,12,13,14}; for (auto i = a.begin(); i != a.end(); ++i){ *i =...
2019-07-04 12:07:57
230
原创 C++_Primer第五版—第三章—3.6节-多维数组练习
#include <iostream>void main(){ //练习3.43 int ai[3][4] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; //版本1:范围for for (int (&i)[4] : ai){ //把i绑定到ai的第一个4元素数组上 for (int j : i){ std...
2019-07-01 19:33:34
155
原创 色彩转换系列之RGB格式与HSV格式互转原理及实现
写在前面HSV是一种将RGB色彩空间中的点在倒圆锥体中的表示方法。HSV即色相(Hue)、饱和度(Saturation)、明度(Value),又称HSB(B即Brightness)。色相是色彩的基本属性,就是平常说的颜色的名称,如红色、黄色等。饱和度(S)是指色彩的纯度,越高色彩越纯,低则逐渐变灰,取0-100%的数值。明度(V),取0-max(计算机中HSV取值范围和存储的长度有关)。HSV...
2019-06-17 17:56:26
8494
4
原创 色彩转换系列之RGB格式与HSI格式互转原理及实现
写在前面HSI色彩空间是从人的视觉系统出发,直接用颜色三要素:色调(Hue)、饱和度(Saturation或Chroma)和亮度 (Intensity或Brightness)来描述色彩。H——表示颜色的相位角,是彩色最重要的属性,决定颜色的本质。红、绿、蓝分别相隔120度;互补色分别相差180度,即颜色的类别。 S——表示颜色的深浅程度,饱和度越高,颜色越深。与白色的比例有关,白色比例...
2019-06-17 17:01:16
11283
原创 使用VS2013运行.exe出错系列解决办法
问题一:在VS中运行编译程序正常,但运行生成的.exe出现“无法打开某某文件”的问题: 无法打开这些文件夹,就是在.exe目录下没有改文件夹,所以找不到。解决办法:将这些文件全部放在.exe目录下。拓展:当然还会出现“无法加载某某模型”,“无法找到某某”,.......诸如此类的问题,我们只需将报错打不开的这些文件统统放在.e...
2019-06-13 15:37:47
2269
原创 VS出现LNK2038: mismatch detected for 'RuntimeLibrary': value 'MDd_DynamicDebug' 不匹配解决办法
在工程上右键-》属性-》c/c++-》代码生成-》运行库因为所选的工程运行库选择错误导致的。其中四个选项的对应含义如下:多线程调试Dll (/MDd) 对应的是MD_DynamicDebug多线程Dll (/MD) 对应的是MD_DynamicRelease多线程(/MT) 对应的是MD_StaticRelease多线程(/MTd)对应的是MD_StaticDebug这...
2019-06-13 15:14:19
3386
1
转载 win10下安装Ubuntu16.04双系统——详细步骤
前情提要如何卸载(删除Ubuntu),Win10下试了许多种方法,什么MbrFix、EasyBCD、亦或是Boot Option。都不行。前两者不行,操作之后重启无法直接进入Windows,后者也不行,找不到所谓的Delete Option,或者什么反应都没有。然后忽然看到一篇醍醐灌顶的博文:https://blog.csdn.net/cfqcfqcfqcfqcfq/article/det...
2019-03-06 10:57:03
247
转载 opencv-图像遍历的几种方式
转载:https://www.cnblogs.com/ronny/p/opencv_road_2.html我们在实际应用中对图像进行的操作,往往并不是将图像作为一个整体进行操作,而是对图像中的所有点或特殊点进行运算,所以遍历图像就显得很重要,如何高效的遍历图像是一个很值得探讨的问题。一、遍历图像的4种方式:at<typename>(i,j)Mat类提供了一个at的方法...
2019-03-06 10:23:21
443
2
转载 opencv矩阵元素数据类型总结
转自:http://www.jianshu.com/p/204f292937bb 在以下两个场景中使用 OpenCV 时,我们必须事先知道矩阵元素的数据类型:使用 at 方法访问数据元素的时候要指明数据类型 做数值运算的时候,比如究竟是整数除法还是浮点数除法。但面对一大堆代码,我们有时并不清楚当前的矩阵元素究竟是什么类型,这篇文章就是以 cv::Mat 类为例来解决这个问题。c...
2019-02-26 13:58:50
344
原创 git 常用命令-精简版
1.创建仓库mkdir gitcd git ——创建/home/XXX/git空目录cd dir ——访问dir文件夹2.通过git init命令把这个目录变成Git可以管理的仓库:git init ——初始化Git仓库,使git可以管理该文件夹3.用命令git add告诉Git,把文件添加到仓库(实际上就是把文件修改添加到暂存区):git add filename...
2019-02-23 17:44:07
148
转载 git常用命令-详解版
原博客地址:https://blog.csdn.net/ithomer/article/details/7529022一、 Git 命令初识在正式介绍Git命令之前,先介绍一下Git 的基本命令和操作,对Git命令有一个总体的认识示例:从Git 版本库的初始化,通常有两种方式:1)git clone:这是一种较为简单的初始化方式,当你已经有一个远程的Git版本库,只需要在本地克隆一...
2019-02-21 21:58:14
764
POSHE算法c++代码
2019-03-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人