
C++
文章平均质量分 56
MikeDai
专注结构光3D重建、机器视觉、图像处理算法、计算机视觉、C++编程
展开
-
图像形态学shrink——C实现
本文实现参考matlab实现方式,将m语言转换成C实现。参考:https://ww2.mathworks.cn/help/images/ref/bwmorph.htmlmatlab中这样调用BW = bwmorph(BW1,‘skel’,n);matlab中这样描述shrink操作:With n = Inf, shrinks objects to points. It removes pixe...原创 2019-04-10 23:24:05 · 1740 阅读 · 0 评论 -
CUDA实现图像二次线性插值缩放
原理: 参考:http://blog.youkuaiyun.com/housisong/article/details/1452249,说得很清楚,这里只是顺带一提。 (Sx-0)/(SW-0)=(Dx-0)/(DW-0) (Sy-0)/(SH-0)=(Dy-0)/(DH-0) => Sx=Dx*SW/DW Sy=Dy*SH/DH 聚焦看看(原创 2018-01-17 12:36:16 · 4777 阅读 · 0 评论 -
ffmpeg av_read_frame源码分析
传入参数:格式上下文,包指针int av_read_frame(AVFormatContext *s, AVPacket *pkt){ const int genpts = s->flags & AVFMT_FLAG_GENPTS; int eof = 0; int ret; AVStream *st;if (!genpts) { 如果没有设定生成pt原创 2018-01-15 13:16:43 · 868 阅读 · 0 评论 -
win32 http post 实现
WIN32_LEAN_AND_MEAN 宏必须定义,否则会出现很多包含系统文件的错误。size_t process_http(int sockfd, char *host, char *page, char *poststr){ char sendline[MAXLINE + 1], recvline[MAXLINE + 1]; size_t n; //sprintf(sendline,原创 2017-07-24 12:21:05 · 2421 阅读 · 0 评论 -
WIN32 写入log文件
创建log目录及其文件:void CLog::CreateLog(){ int err; CString path = DefaultPath(); path.Append(LogPath); CString name; SYSTEMTIME systime; GetLocalTime(&systime); name.Format(_T(原创 2017-03-27 12:14:02 · 989 阅读 · 0 评论 -
IOS移植ffmpeg
前段时间有空,顺便了解了ffmpeg,从ffmpeg中提取不少代码,并将其播放3gp(mp4),视频h264,音频aac相关代码移植到IOS,现整理如下,欢迎大家指正。IOS 上移植ffmpegLinux环境下配置:--disable-yasm --disable-asm--disable-altivec --disable-amd3dnow --disable-amd3d原创 2017-03-16 13:08:51 · 1532 阅读 · 0 评论 -
ffmpeg中缓冲代码分析
读包操作分析//链表元素结构体typedef struct MyAVPacketList { AVPacket pkt; struct MyAVPacketList *next;//指向下一个元素 int serial;} MyAVPacketList;//包队列,先进FIFO队列typedef struct PacketQueue { MyAVPack原创 2017-03-16 12:58:34 · 3306 阅读 · 0 评论 -
win32下删除给定路径下的所有文件,创建目录
原理:找到给定路径下的所有文件,然后一个一个的删除,代码如下:BOOL ClearPath(LPCTSTR dir){ WIN32_FIND_DATA ffd; CString path; HANDLE hFind = INVALID_HANDLE_VALUE; BOOL success = TRUE; path.Append(dir); path.Append(_T("\\原创 2017-03-16 12:30:53 · 1222 阅读 · 0 评论 -
使用ZipArchive压缩文件
下载ZipArchive源码,有例子程序。http://www.artpol-software.com/Download.aspxtypedef list FILELIST;typedef list::iterator FILELISTIT;typedef list FILELISTADD;typedef list::iterator FILELISTADDIT;ZIPSTR原创 2017-03-16 00:29:41 · 1258 阅读 · 0 评论 -
Direct2D渲染图形
创建D2D资源:BOOL CreateD2DResource(){ if (!mRenderTarget) { HRESULT hr; hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_MULTI_THREADED, &mD2D1Factory); if (FAILED(hr))原创 2018-01-18 13:11:50 · 2820 阅读 · 0 评论 -
Direct2D创建ID2D1Bitmap位图
输入文件名,可以是bmp、png、jpg等格式文件BOOL CreateBitmapFromFile(ID2D1HwndRenderTarget* renderTarget, const char* fileName){ HRESULT hr = S_OK; IWICBitmapDecoder *pDecoder = NULL; IWICBitmapFrameDec原创 2018-01-19 12:38:59 · 4332 阅读 · 1 评论 -
zbar源码分析--QR解码过程分析
QR解码流程:运动均值去噪、二阶微分边缘检测、获取QR定位标志、生成finder pattern 聚类、计算相交的水平聚类和垂直聚类的中心、识别符号。定位搜索 运动均值阈值:先做水平扫描,再做垂直扫描。图像扫描是以Z字型模式逐行扫描,采用运动均值去噪,其中窗口大小为N=4。为了节省效率,在优化时,去掉边界检查。每扫描一行或一列需要做空白边处理。二阶微分边缘检测:1、对运动均值后图像做二阶原创 2017-03-24 09:58:47 · 6682 阅读 · 33 评论 -
图像双立方插值——C实现
原理:详细参见https://en.wikipedia.org/wiki/Bicubic_interpolation在数学上,双立方插值是2个变量函数在方形网格上立方插值的一个扩展,在图像处理中,双立方插值考虑插值像素点周围16个像素,当不在乎算法执行速度时,一般选择双立方插值,相对最近邻域插值和二次线性插值,双立方插值具有较少的插值畸变(artifacts ,不知道翻译成什么好)。双立方插值...原创 2019-03-29 23:00:10 · 2936 阅读 · 0 评论 -
C实现Canny边缘检测
网上有很多关于Canny实现的文章,但是多数在最后的边缘追踪时采用递归实现或者采用非递归实现个人认为效果又不好或者修改领域跟踪范围复杂。采用递归实现可以参考:http://www.math.tau.ac.il/~turkel/notes/canny_source.cmatlab实现可以参考http://justin-liang.com/tutorials/canny/中给的源码,我就是根据此链...原创 2018-10-10 00:18:53 · 3450 阅读 · 0 评论 -
matlab工具将matlab脚本转C语言实现
Matlab 提供了将matlab语句转换成C或者C++语句的工具Matlab coder,但是部分matlab实现的函数是不能转换的,能够转换的函数列表在这个链接中可以找到:https://www.mathworks.com/help/coder/ug/functions-supported-for-code-generation-alphabetical-list.html。下面就以matl...原创 2018-09-25 22:27:29 · 18382 阅读 · 4 评论 -
VS2013中使用ffmpeg解码视频
在前一篇文章中讲了如何编译ffmpeg,现在介绍如何使用已经编译好的ffmpeg。 首先使用VS2013新建一个控制台工程,取消预编译头,然后将ffmpeg编译生成的include目录拷贝到此工程下,把include改为ffmpeg。加入到工程的包含路径之下,如下图: 拷贝lib到解决方案目录下,加入包含路径: 包含头文件:extern "C"{#include "libavut...原创 2018-03-28 21:11:03 · 1538 阅读 · 0 评论 -
VS2013编译ffmpeg
我这里采用的是别人已经移植好的成品,也可以采用MinGW,像linux风格的编译,这里不再提。 下载地址: https://github.com/ShiftMediaProject/FFmpeg/ 在D盘或E盘新建目录FFmpeg-window。下载之后解压到此目录,其他第三方库也解压到此目录。 https://github.com/ShiftMediaProject/下包括了ffmpeg所需...原创 2018-03-28 20:42:51 · 1187 阅读 · 0 评论 -
opencv实现傅里叶变换
参考opencv文档,https://docs.opencv.org/2.4/doc/tutorials/core/discrete_fourier_transform/discrete_fourier_transform.html 读取图像文件: const char* filename = argc >=2 ? argv[1] : "lena.jpg"; Mat ...原创 2018-03-26 21:01:47 · 1209 阅读 · 0 评论 -
图像多边形填充算法
算法原理: 参考连接:http://alienryderflex.com/polygon/,这里介绍得很详细,但是参考其中代码,实现下来,发现其中有一个bug,不知道是不是我自己的问题。 多边形绘制在原始图上: 为了高效,先确定多边形的坐标范围:typedef struct boundary_t{ int left; int right; int top...原创 2018-03-26 20:05:45 · 2680 阅读 · 0 评论 -
VS2013中使用kafka
编译librdkafka,下载地址:https://github.com/edenhill/librdkafka,不得不感激强大的GitHub,上面几乎你要的开源代码都有。另外需要下载zlib,openssl,下载地址:https://github.com/ShiftMediaProject/openssl,https://github.com/ShiftMediaProject/zlib,三个工原创 2018-01-20 13:03:06 · 1975 阅读 · 2 评论 -
24位RGB位图转换成1位位图
1位位图数据,每个像素点只有一个bit,0 or 1,0表示图像中的0,1表示255,在保存位图的时候需要在颜色表中指出。unsigned char* BMP24TOBMP1(unsigned char* img, int width, int height){ int src_row_bytes; int dst_row_bytes; unsigned char* dst=NULL原创 2017-03-16 00:11:29 · 3658 阅读 · 0 评论 -
win32创建双缓冲
首先创建一个兼容的DC和位图: HDC hdc = CreateCompatibleDC(dc); HBITMAP hBitmap = CreateCompatibleBitmap(dc,width,height); HBITMAP hOldBMP = (HBITMAP)SelectObject(hdc,hBitmap);绘制背景: ::SetBkMode(hdc, TRANS原创 2017-03-15 12:39:39 · 1039 阅读 · 0 评论 -
win32下绘制多行文本
1、创建字体LOGFONT lf = { 0 };::GetObject(::GetStockObject(DEFAULT_GUI_FONT), sizeof(LOGFONT), &lf);_tcsncpy(lf.lfFaceName, fontName, LF_FACESIZE);lf.lfCharSet = DEFAULT_CHARSET;lf.lfHeight = -fontHe原创 2017-03-15 12:19:09 · 2117 阅读 · 0 评论 -
C实现RGB32 Gama校正
C实现Gama变换 原理: Gama变换也幂变换,公式如下: s=cr^γ 输入r与s的变换关系如下图: 上图中,横坐标0附近对应于输入图像中的黑色像素值,纵坐标中0附近对应于输出图像中黑色像素值。由上图可以看出,当γ<1时,Gama变换将输入图像中0值邻域拉伸了,相反,当γ>1时Gama变换将输入图像中0值邻域缩小了。当γ=1时,为恒同变换。上图中,γ=1两边的变换互为逆映射,如原创 2017-03-22 00:23:43 · 1085 阅读 · 0 评论 -
YUV420转换成RGB24
YUV转换成RGB转换公式: R = Y + 1.4075 *(V-128) G = Y – 0.3455 *(U –128) – 0.7169 *(V –128) B = Y + 1.779 *(U – 128)优化策略,将浮点运算转换成整数运算,创建颜色表,通过查表减少运算提升效率。变量声明:uint8_t *auto_color_table;uin原创 2017-03-20 23:37:55 · 3242 阅读 · 1 评论 -
win32,使用PDFlib生成PDF文件
1、下载PDFlib,下面的链接下载的是破解版,否则有“hello pdflib”的水印。 地址:http://download.youkuaiyun.com/detail/qiantz/30324942、创建一个pdf: char* name; PDFlib *p; name = "test.pdf" output = fopen(name, "wb"); if(!o原创 2017-03-10 16:28:05 · 2225 阅读 · 0 评论 -
win32 导入excel文档模板,写入数据
首先,将excel文档另存为xml,相关方法,上一篇博文已经做过介绍,此处不再累述。打开模板xml: xmlDocPtr doc; xmlNodePtr cur; xmlNodePtr parent; //doc = xmlParseFile("sheet1.xml"); doc = xmlReadFile("sheet1.xml", NULL,XML_PARSE_NOBLANKS原创 2017-03-10 12:58:17 · 626 阅读 · 0 评论 -
WIN32 下读取excel文档
1、将excel另存为xml文档,在office下:wps下另存为:2、采用libxml2解析xml数据: xmlDocPtr doc; xmlNodePtr cur; //doc = xmlParseFile(&file_name[0]); doc = xmlReadFile(&file_name[0], NULL,XML_PARS原创 2017-03-10 12:21:18 · 1952 阅读 · 1 评论 -
32位RGB图像中值滤波
中值滤波对椒盐噪声有很好的滤出效果,下面以3x3滤波器为例,实现中值滤波。排序,采用选择排序。void Sort(int data[9]){ int i; int j; int minv; int index; index = 0; for (i = 0; i < 9; i++) { minv = data[i]; index = i; for (j =原创 2017-03-20 12:20:13 · 1807 阅读 · 0 评论 -
xml 解析,libxml2的使用
首先,从ftp://xmlsoft.org/libxml2/下载libxml2,依赖iconv、zlib1两个库。1、读取文件,生成dom树xmlDocPtr doc;xmlNodePtr cur; doc = xmlReadFile(&file_name[0], NULL,XML_PARSE_NOBLANKS); if (doc == NULL ) {fpr原创 2017-03-09 12:08:54 · 631 阅读 · 0 评论 -
32位位图与24位位图互相转换
1、32位图数据转换成24位位图数据:unsigned char* RGB32TO24(unsigned char* src, int width, int height){ uint8_t* data = NULL; uint32_t src_row_bytes; uint32_t dst_row_bytes; uint32_t off; int i,j; uint32_t*原创 2017-03-13 11:45:50 · 12366 阅读 · 0 评论 -
win32 wifi连接
首先,获取所有可用的wifi: windows API提供WlanEnumInterfaces接口获取所有可用的wlan,详细的可以参看msdn下的例子程序,https://msdn.microsoft.com/en-us/library/windows/desktop/ms706749(v=vs.85).aspx if (pBssEntry->bSecurityEnabled) wp原创 2017-03-23 13:00:07 · 1713 阅读 · 0 评论 -
32位图像旋转90度
1、顺时针旋转90度:void RGB32RotateClockwise90(uint8_t* src,uint8_t* dst, int width, int height){ int w; int h; int src_row_bytes; uint8_t* img; uint8_t* ptr; int i, j; unsigned int off1; unsigned原创 2017-03-14 11:53:23 · 925 阅读 · 0 评论 -
WIN32,GetBitmapBits与GetPixel
先看看MSDN上的,The GetBitmapBits function copies the bitmap bits of a specified device-dependent bitmap into a buffer.LONG GetBitmapBits( _In_ HBITMAP hbmp, _In_ LONG cbBuffer, _Out_ LPVO原创 2017-03-15 11:58:35 · 2071 阅读 · 0 评论 -
8位10进制数变成32进制数
1、输入一个最大的数,确定需要的多少个32进制位int GetDigitNum32(unsigned int max){ int off; int num; off = 5; num = 0; while(max) { max = max >> off; num++; } return num;}2、无符号数转换成字符char* NumToChar原创 2017-03-14 17:31:44 · 2928 阅读 · 0 评论 -
C 生成MD5串
下面的MD5加密程序是从ffmpeg中提取的,增加最终生成MD5串的代码。#include #include #include #include "MD5.h"#define min(x,y) ((x) < (y)?(x):(y))#define HAVE_FAST_UNALIGNED 0//使用check_for_endianness检测CPU字节序,如果检测结果为1,这里设原创 2017-03-14 17:07:59 · 804 阅读 · 0 评论 -
win32 下使用数据库
由于操作window下的数据库,需要引用MFC的库函数,所以得把MFC包含进来,如下图中设置,以VS2008为例:Use of MFC 中设置为 Use MFC in a Shared DLL接下来创建数据库: CDaoDatabase db; //数据库 CDaoRecordset RecSet(&db); //记录集 //创建数据库文件 db.Creat原创 2017-03-14 16:31:27 · 950 阅读 · 0 评论 -
C实现改变彩色图像亮度
对于灰度图像,改变亮度只需同时增加或减少整张图像的灰度值即可,但是对于彩色图像,相对来说就比较麻烦点。对RGB空间的图像来说,需将RGB空间转换到HSL,H是色调,S是饱和度,L是亮度。改变亮度时将RGB颜色转换成HSL表示,修改L,其他不变,再将HSL转换为RGB。 公式: RGB to HSL: HSL to RGB: 代码实现:#ifndef max#define max(a原创 2017-03-23 17:14:20 · 2682 阅读 · 2 评论 -
探测图像文件类型
在移植多种图像格式解码器时,不知道该调用那个解码器,可以先探测图像文件类型,具体如下:先读取文件开头的8字节的数据:FILE* file; unsigned char data[8]; dai_image_type type; int len; dai_image* img = NULL; file = fopen(file_name, "rb"); if(!file)原创 2017-03-14 12:24:12 · 620 阅读 · 0 评论 -
24位位图旋转90度
1、顺时针旋转90度void RGB24RotateClockwise90(uint8_t* src,uint8_t* dst, int width, int height){ int w; int h; int src_row_bytes; int dst_row_bytes; uint8_t* img; uint8_t* ptr; int i, j; unsigned i原创 2017-03-14 11:57:46 · 1274 阅读 · 0 评论