自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

DreamerZhang的专栏

积跬步至千里

  • 博客(42)
  • 资源 (3)
  • 收藏
  • 关注

原创 C++之string 常用总结

Code:void test_string() { //// string 初始化 string s0;//s0="", null string string s1(5, 'a');//s1="aaaaa" string s2(s1);//s2="aaaaa" char* cStr = "Happy!"; string s3(cStr);//s3="Happy!", C 风格字符串赋值给string,直接赋值 string s4(cStr, 2);//s4="Ha", s(cp,n)

2021-06-08 20:52:19 478

原创 深度学习入门(一)安装TensorFlow的GPU版本

安装软件:VS2015 CUDA9.0 Anaconda3 TensorFlow-GPU 1.10.0一:注意问题1、选择合适的Python版本,工具Anaconda3自带的Python版本是3.7.4,(网上说的好多包没有3.7的,还是选择3.6比较稳妥)2、根据CUDA版本确定Cudnn的版本(我下载的库版本是cudnn-9.0-windows10-x64-v7.6...

2020-02-14 15:08:03 2656

原创 C++常成员变量、静态变量、常成员函数初始化及定义

1、static定义的静态变量不属于某个具体类对象,它是属于类的的,只能在类的内部声明,在类外定义;即在C++中,static静态成员变量不能在类的内部初始化;2、C++中,const成员变量也不能在类定义处初始化,只能通过构造函数初始化列表进行,并且必须有构造函数。 【const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的。因为类可以创建多个对象,不同的对象其con...

2019-10-14 23:00:47 2364

原创 C++链表插入删除遍历实现

本文通过C++实现C++单链表相关操作:初始化、插入、删除、打印等操作。#pragma once#include <iostream>//定义节点typedef struct Node { int value; Node* next;};typedef Node* pNode;class CListTest{ public: CListTest()...

2019-10-14 22:18:46 1828

原创 OpenCV4-入门学习(二)图像滤波

OpenCV图像滤波(也可称为模糊、平滑)实际是模板与图像卷积的过程,主要分为:1、线性滤波 方框滤波:模糊 均值滤波:模糊 高斯滤波:(广泛应用实际图像预处理)平滑处理、主要处理高斯噪声,降低图像的尖锐变化。无论在空间域还是频率域都是有效的低通滤波器。2、非线性滤波 中值滤波:去除椒盐噪声 双边滤波:包边去燥,可以理解为高斯滤波的升级版,在去燥...

2019-10-08 22:06:11 536

原创 C++类所占空间总结

1、一个空类所占字节为1:class Stu2{};2、类所占空间只包含变量,不包括普通函数;3、虚函数占8个字节(64位系统中),因为有指向虚函数的指针;4、类所占字节应满足内存对齐原则;5、静态变量或者静态函数不占类内存空间;原则:C++中,每个类对象的所占用的存储空间,只是该数据部分所占的存储空间,而不包括函数所占的存储空间。同一个类的多个对象共享函数代码。cla...

2019-10-08 21:03:34 1558 1

原创 C++命名空间namespace的使用

C++ 除了使用标准命名空间 using namespace std,还可以使用自己命名的空间,其目的主要是限制变量或者函数的使用范围。在实际开发中,有时多个人难免会命名相同的函数名字,为了明确该函数使用范围,引进命名空间。其特性主要如下:1-命名空间将全局作用域分成不同的部分, 2-不同命名空间中的标识符可以同名而不会发生冲突 3-命名空间可以发生嵌套 4-全局作用域...

2019-10-08 20:41:02 348

原创 OpenCV4-入门学习(一)

目录图像读取及显示图像分离通道显示 图像读取及显示 //第一个例子:显示图像void loadImage() { Mat image, grayImage;/* 常用参数: IMREAD_UNCHANGED = -1, return the loaded image as is (with alpha channel, otherwise it gets ...

2019-10-08 20:18:39 11060 2

原创 CUDA拷贝结构体成员指针

在网上看了好多CUDA中在拷贝结构体以及在内核中如何访问结构体成员变量的帖子,都没找到一个质量好的,so, 自己写一个吧。。。先来个结构体:struct Stu_Struct{ int count; //人数 short* score; //每个人的分数,总计count short num; //附加分数};说明 首先大家都知道在主机端和设备端...

2019-07-14 15:14:10 2135 4

原创 CUDA 多GPU调用实现

当设备存在多块GPU时,为了高效利用GPU,我们常常需要使用多卡计算。本例中我们使用OpenMP来进行多线程调用多GPU运行,初学者无须详细了解OpenMP,只需知道一两句命令就行。详细步骤如下:1、建立一个普通CUDA项目:2、在项目属性C/C++设置语言:支持openMP3、在CUDA C/C++中设置预编译命令:-Xcompiler "/openm...

2019-03-06 21:45:00 8818 3

原创 VS2015下CUDA9的安装

环境:win10  VS2015    GTX  Geforce 1060由于提前安装了显卡驱动,安装CUDA9(cuda_9.0.176_win10 ) ,CUDA8 相继失败,总是说VS Integration无法安装,,,试了网上各种方法:卸载显卡驱动和所有与Nvidia有关的东西、先安装VS Integration再安装其他组件、装VS2013和CUDA8.0、均失败。。。。。就差...

2018-09-02 21:04:42 946

原创 C++读写文本数据

1、C++读写二进制文件 /***************************************************************** * \author DreamerZhang * \date 2019.08.27 * \brief 读取二进制文件,数据类型为short * \param fileName-文件名 readD...

2017-10-24 14:58:23 68465 4

原创 C++之 标准库类型 Vector和String

本文对于标准库类型string和vector的基本操作学习,比较简单,,,   KEY:行字符串的获取,string::size_type的使用,vector元素的插入,迭代器的使用测试代码:#include #include #include using std::cin;using std::cout;using std::endl;using std::string;

2017-10-11 15:38:45 920

转载 CUDA GPU架构-硬件和软件

掌握部分硬件知识,有助于程序员编写更好的CUDA程序,提升CUDA程序性能,本文目的是理清sp,sm,thread,block,grid,warp之间的关系。由于作者能力有限,难免有疏漏,恳请读者批评指正。  首先我们要明确:SP(streaming Process),SM(streaming multiprocessor)是硬件(GPU hardware)概念。而thread,block

2017-09-27 17:25:05 1485

原创 图像处理 面试准备

1、矩形检测和字符识别2、读出图片中仪表的读数3、C/C++内存分配方式4、面向过程编程和面向对象编程5、走格子,比如(0,0)到(5,7)4、字符串数字转换为整数 "12345" to 123455、虚函数的作用以及实现机制

2017-09-13 00:05:56 2889

原创 二叉树的前序遍历-中序遍历-后序遍历

1、遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次。由于二叉树是非线性结构,因此,树的遍历实质上是将二叉树的各个结点转换成为一个线性序列来表示。二叉树的遍历分为:前序遍历、中序遍历、后序遍历。前序遍历:根节点、左子树、右子树中序遍历:左子树、根节点、右子树后序遍历:左子树、右子树、根节点先来看一个

2017-09-08 18:55:48 1885

原创 OpenCV学习之图像分割

1、sobel算子边缘检测//Sobel梯度算子void imageSobel(){ const char* name = "lena.tif"; IplImage* image = cvLoadImage(name, CV_LOAD_IMAGE_GRAYSCALE); if (image == NULL){ printf("image load failed.\n"); re

2017-08-24 17:45:59 1248 2

原创 图像均值滤波的CUDA并行化优化

1、算法原理均值滤波也是线性滤波,目标点的像素为周围(模板覆盖)像素的平均值。对图像进行均值滤波处理时,每一个像素点的处理与其它像素点无关,所以,可以把对于每一个像素的处理映射到每个线程中。2、并行思路将像素映射到二维坐标空间,然后使用i*WIDTH+j的方式索引像素,本实例是寻找周围9个像素点的值。对于每一个线程都将去寻找它的领域像素,然后对其求平均值。为了简化计算,边界采用复制像素

2017-08-18 16:26:49 7368 8

原创 OJ测试数据的输入格式列举

在做一些在线编程题或者ACM训练题的时候,我们会遇到各种各种的输入要求,比如:或者又或者以下是各组输入的整理:void test1(){ //一直输入,直到文件结束 int a, b; //用 ctrl + Z 强制结束 while (scanf("%d%d", &a, &b) != EOF){ //** while (cin >> a >> b){

2017-08-17 21:00:58 1942

原创 枚举变量的使用和类型声明

1、枚举类型     什么时候会用到枚举类型呢,当一个变量只有限定值可取的时候。枚举,即将变量的值一一列举出来。C语言中,对于枚举元素是按常量处理的,定义时默认值是0 1 2 3.。。。当然,也可以改变枚举变量的值。enum color{red, green,blue};enum color mycolor;mycolor = red;enum color{red=5, gre

2017-08-09 19:58:37 21869

原创 CUDA学习之纹理内存

1、纹理存储器的特性    纹理存储器中的数据以一维、二维或者三维数组的形式存储在显存中,可以通过缓存加速访问,并且可以声明大小比常数存储器要大的多。在kernel中访问纹理存储器的操作称为纹理拾取(texture fetching)。将显存中的数据与纹理参照系关联的操作,称为将数据与纹理绑定(texture binding). 显存中可以绑定到纹理的数据有两种,分别是普通的线性存储器和c

2017-08-02 10:22:28 6051 9

原创 matlab高斯滤波器

1、使用matlab自带的函数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%clear; img = imread('lena.tif'); w = fspecial('gaussian',[5,5],1); %replicate:图像大小通过赋值外边界的值来扩展 %symmetric 图像大小通过沿自身的边界进行镜像映射扩展

2017-07-26 16:00:33 48555 16

原创 OpenCV系列学习之图像形态学

形态学是什么呢,在生物学说的是研究动植物的形态、结构,延伸到图像莫非就是图像的轮廓、骨架、边界等等。形态学的基本操作是腐蚀与膨胀,简单的讲腐蚀就是消除掉某些小东西,膨胀就是扩大或者‘粗化’一些物体。但是,为了彻底搞清楚这两个东东,我们还是得从原理上搞清楚。1、腐蚀与膨胀的定义腐蚀:  B是结构元且有一个中心点,可以理解为移动的window或者卷积核,A是图像。公式表达的是:在图

2017-07-11 18:14:41 631

原创 图像处理之滤波器介绍

最近在看OpenCV 图像处理-平滑处理这个章节,于是呢,想着滤波器总结一下。这里主要是空间域滤波器的介绍,频率域以后再说吧。首先分为平滑空间滤波器和锐化空间滤波器来进行介绍。平滑空间滤波器主要用于模糊处理和降低噪声,主要两类:均值滤波器和中值滤波器。锐化空间滤波器主要是:拉普拉斯算子和梯度算子1、均值滤波器       假设我们有一个3*3的模板,系数全为1,那么欲求的中心点像素值就

2017-07-09 17:31:16 23155 1

原创 openCV学习之CvMat矩阵访问

今天看到openCV CvMat这个章节,作者介绍了三种方法即:简单的方法、麻烦的方法、恰当的方法,开始有点晕晕的,后来看了些博客算是理解到了。首先最容易的是使用CV_MAT_ELEM存取矩阵,或者使用另一个类似的宏CV_MAT_ELEM_PTR,CV_MAT_ELEM_PTR是返回指向这个数据元素的指针,也是二者的主要区别。但是,在计划顺序访问矩阵的数据元素时,这种方法效率最低。

2017-07-05 12:40:12 5398

原创 openCV直方图均衡化

1、什么是直方图均衡化直方图是对图像像素的统计分布,它统计了每个像素(0到L-1)的数量。直方图均衡化就是将原始的直方图拉伸,使之均匀分布在全部灰度范围内,从而增强图像的对比度。直方图均衡化的中心思想是把原始图像的的灰度直方图从比较集中的某个区域变成在全部灰度范围内的均匀分布。在一幅图像中,明亮图像的直方图倾向于灰度级高的一侧,灰暗图像的直方图倾向于灰度级低的一侧,如果一副图像占有全部可能

2017-07-03 15:29:57 18328

原创 OpenCV入门学习第一篇

接触到图像处理,不免要用到OpenCV,丰富的图像处理函数,不仅在追求高性能(基于C实现)上而且开源库更是方便开发者不断扩展openCV库。是计算机视觉研究方向的必要开发工具。由于刚刚接触OpenCV,本文主要是是对于OpenCV一些简单实例的测试与实现。  1、OpenCV的安装配置    对于OpenCV的安装网上很多帖子,这里就不用过多介绍了。(参考:http://blog.csdn

2017-06-28 09:09:33 6645 4

原创 CUDA使用二级指针表示二维数组

首先看下我们在CPU上是如何用二级指针表示二维数组的,其实就两点:一是用一级指针保存数据,二是用二级指针去按行索引数据位置。关于一级指针和二级指针的内存分配这里不讲了,注意数据类型就可以了。代码做了相关说明,应该比较好理解:#define Row 8#define Col 4 //声明Row个行指针: cpuA cpuA+0 cpuA+1 cpuA+Row int

2017-06-09 11:50:27 6303 8

原创 CUDA矩阵乘法

一、使用全局内存矩阵乘法,即用矩阵A每行与矩阵B的每列,依次做乘积累加就可以得到各个元素的值。在CPU上用三层循环实现。这里是将二维数组用一维的形式表示,即按行存储。 size_t size = WIDTH*WIDTH * sizeof(int); int *h_A = (int *)malloc(size); int *h_B = (int*)malloc(size); int *

2017-06-07 20:53:39 4456 1

原创 C++ 几种常用排序算法讲解

一、冒泡法排序算法,大家用过或者写得最多就是冒泡算法了吧,就是临近的数字两两比较,用两层循环来比较。这样,第一趟(外循环)完后最小或者最大的值就到了最前面,形象点就是小泡泡浮了起来。这个不用多介绍了,直接上代码:void maoPaoSort(int array[]){ for (int i = 0; i < N-1; i++){ for (int j = 0; j < N; j++

2017-06-06 20:01:24 27150 3

原创 OpenMP入门学习

在看CUDA的时候,接触到了OpenMp,于是呢,就看了几篇博客了解了一下,,,,环境:Win10 x64  4核  VS20151、什么是OpenMP呢?   OpenMP是由OpenMP Architecture Review Board牵头提出的,并已被广泛接受,用于共享内存并行系统的多处理器程序设计的一套指导性编译处理方案(Compiler Directive)。OpenM

2017-05-21 21:38:02 853

原创 Qt 调用CUDA动态库配置

本文配置环境:Win7(x64)+VS2012+CUDA+Qt5.5.01、首先保证CUDA集成到VS下(如下图顺利安装Nsight for VS2012)。CUDA安装比较简单,选自定义安装,然后一直next 就可以了。2、CUDA动态库的封装参考以前的博客:http://blog.csdn.net/zhangfuliang123/article/details/71757961。封装成

2017-05-18 21:14:08 3942

原创 CUDA存储器详解

为了更好的在kernel函数中提高数据访问效率,我们需要理解CUDA各个存储器模型的特点,合理的分配存储空间。        -------------------华丽的分割线-------------------一、存储器比较每个线程拥有自己的register and loacal memory;(可读可写)每个线程块拥有一块shared memory;(可读可写)所有线

2017-05-17 11:42:14 1828

原创 CUDA动态库封装以及调用

参考:http://blog.sina.com.cn/s/blog_618941f701016d26.html通过将CUDA相关计算操作放在库中,方便在项目中调用,省去了每次编译cu文件的麻烦,也便于集成到其他平台上。本文配置:VS2015   CUDA8.0一、封装CUDA动态库主要步骤:修改自定义方式、设置cu文件项类型为CDUA CC++ ,添加依赖库cudart.lib.

2017-05-12 20:20:52 8881 2

原创 C++动态库封装及调用

一直对动态库的封装理解不是很透彻,虽然之前写过一个Demo,不过并没有真正的理解。所以写下来,帮助自己理解下。1、一个程序从源文件编译生成可执行文件的步骤:预编译 -->  编译 -->  汇编 --> 链接(1)预编译,即预处理,主要处理在源代码文件中以“#”开始的预编译指令,如宏展开、处理条件编译指令、处理#include指令等。(2)编译过程就是把预处理完的文件进行一系列词法

2017-05-10 11:40:33 63393 11

转载 VS2010 CUDA和C++混合编译

在做项目集成的时候需要用到cpp和cuda文件联调,自己摸索了两种方式实现cpp和cu文件混合编译。本文环境:windows7 64位VS2010CUDA5.5英伟达显卡Tesla C1060前言装好CUDA 5.5 sdk后,默认会自动添加好系统环境变量。因此不需要额外配置,不过为了保险起见,可以选择性地添加以下环境变量:

2017-05-09 10:57:17 3364

原创 字符型数据(字符常量和字符串常量)使用及区别

1-字符型    在各种不同系统中,字符类型都占一个字节(8位)。定义如下:  char c='a';//C 语言中,使用单引号把字符引起来构成字符常量,双引号"abc"是字符串常量也可以用字符对应的ASCII码赋值,如下:  char c=97;     char c='good';得到的是最后一个字符 即'd'     C语言是ASCII码的形式存储字符型变

2017-04-20 20:09:28 16841 2

原创 设计模式总结

还记得大三的时候想学习下设计模式,泛读了下觉得在当时根本用不上,就放下了。转眼过去了三年,做了些项目,期间也接触到了设计模式。感觉很有必要系统的学习下。感触最深的是以前写的代码难以重用、可维护性差、封装性也惨不忍睹。所以还是得老老实实的来走一遍床说中的------“设计模式”。1、避免代码中出现多的重复的代码,否则难以维护。尽量封装成公共接口供调用。2、.将业务逻辑与界面逻辑分开,使得一个

2016-12-21 22:04:51 310

原创 C++之vector-list-deque容器相关介绍

1、顺序容器 vector 支持快速随机访问 ,代价:中间插入元素开销大 list 支持快速插入和删除 ,代价:随机访问开销大 deque 双端队列,从两端插入和删除数据都比较快2、容器构造函数C c; 创建一个名为c 的空容器。c 是容器类型名,如vector , T 是元素类型,如int 或string 。适用于所有容器C c(c2}; 创建容器c2

2016-09-13 21:45:26 324

原创 delete 和 delete[]

C++ 中我们常用new-delete来分配和释放资源,而new一个对象或者一个对象数组都是允许的。动态创建对象只需要指定其数据类型和数据长度,不必为改对象命名。动态创建完的对象我们应该显示地销毁改对象,释放其占用的内存。由此我们将用到delete 或者delete来销毁对象。关于对象销毁又分为两种情况:一是为基本数据类型分配和释放资源,一是为自定义对象分配和释放资源。int* a =

2016-09-12 17:09:46 468

Depends查看库工具.rar

通过depends工具可以有效解决不确定的库依赖,尤其是在不同机器上程序运行失败时可以通过该软件找到缺少的库

2019-08-27

QT 显示图片

这是在QT中显示2张图片,均是灰度图的显示

2014-06-11

容器类元素复制

对于初学者很有用,来源与C++ primer的教学,希望对别人有帮助

2014-06-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除