- 博客(60)
- 收藏
- 关注
原创 C实现harris角点检测器
实现原理详细参照https://en.wikipedia.org/wiki/Harris_Corner_Detector。Harris Corner Detector是一种角点检测算子,它是由克里斯·哈里斯和迈克·斯蒂芬斯于1988年首次引入,其是莫拉维克角落探测器的改进。角是一个点,其邻域内有两个不同方向的边缘。换句话说,角可以被解释为两个边缘的连接,其中边缘是图像亮度的突然变化产生的。角...
2019-05-11 01:21:49 1658
原创 图像形态学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 1672
原创 图像Lanczos3滤波C实现——优化
上一篇博文给出了图像Lanczos3滤波的直观实现,但是整个算法实现过于低效,其原因在于对于每个插值点,都需要重新计算Lanczos系数,本文参考https://github.com/richgel999/imageresampler中的实现,将其C++代码转换成C实现。优化思路:每一行其插值的x位置相同,每一列其插值的y位置相同,因此可以将x位置的插值系数做成table,将y位置的插值系数也做...
2019-03-30 14:57:40 2387 10
原创 图像Lanczos3滤波——C实现
Lanczos 滤波器,因发明者而得名,在信号处理领域,主要用在增加采样率和低通滤波,在图像处理领域用于图像缩放、旋转,其可以在减小锯齿、锐度、振铃效应( aliasing, sharpness, and minimal ringing)取得最好的平衡。滤波函数如下:L(x)={sinc(x) sinc(x/a)if −a<x&l...
2019-03-30 09:41:06 5613 4
原创 图像双立方插值——C实现
原理:详细参见https://en.wikipedia.org/wiki/Bicubic_interpolation在数学上,双立方插值是2个变量函数在方形网格上立方插值的一个扩展,在图像处理中,双立方插值考虑插值像素点周围16个像素,当不在乎算法执行速度时,一般选择双立方插值,相对最近邻域插值和二次线性插值,双立方插值具有较少的插值畸变(artifacts ,不知道翻译成什么好)。双立方插值...
2019-03-29 23:00:10 2875
原创 图像二次线性插值--C实现
1、图像缩放二次线性插值原理:详细参见https://en.wikipedia.org/wiki/Bilinear_interpolation在数学上,二次线性插值是2个变量函数在方形网格上线性插值的一个扩展,其主要做法是先在一个方向上进行线性插值,然后再在另一个方向上进行线性插值,在整体二次线性插值对两变量函数插值而言不是线性的。如图:P点为要插值的点,邻近4个点Q11 = (x1, ...
2019-03-28 23:14:43 3976 2
原创 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 3100
原创 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 18039 4
原创 一维信号峰值检测Matlab实现
参考论文:https://pdfs.semanticscholar.org/56f1/49e51aa9fb9b0b46412b864839f34701d421.pdf 先使用3点运动均值滤波器处理一维信号,先前向再后向处理。作为例子,这里先生成正弦信号波形图,然后执行3点前向运动均值滤波,再3点均值后向运动滤波。信号S(n)={s1,s2,s3,s4,…,sn}.x = 0:0.05:50*...
2018-07-16 22:34:08 12592 9
原创 YOLO训练自定义目标检测
YOLO是强大的目标检测开源库 ,目前支持多个类别的目标检测,如自行车、人、动物、标识等,检测速度比较快,V2下检测速度在普通显卡上可以实时对视频流目标检测,虽然对小目标效果欠佳,但是大多数应用下还是有实际应用意义。相关详细介绍可以参考:https://pjreddie.com/darknet/yolo/?utm_source=next.36kr.com,论文地址:https://pjreddie...
2018-07-08 00:20:34 3313 4
原创 VS2013中使用ffmpeg解码视频
在前一篇文章中讲了如何编译ffmpeg,现在介绍如何使用已经编译好的ffmpeg。 首先使用VS2013新建一个控制台工程,取消预编译头,然后将ffmpeg编译生成的include目录拷贝到此工程下,把include改为ffmpeg。加入到工程的包含路径之下,如下图: 拷贝lib到解决方案目录下,加入包含路径: 包含头文件:extern "C"{#include "libavut...
2018-03-28 21:11:03 1509
原创 VS2013编译ffmpeg
我这里采用的是别人已经移植好的成品,也可以采用MinGW,像linux风格的编译,这里不再提。 下载地址: https://github.com/ShiftMediaProject/FFmpeg/ 在D盘或E盘新建目录FFmpeg-window。下载之后解压到此目录,其他第三方库也解压到此目录。 https://github.com/ShiftMediaProject/下包括了ffmpeg所需...
2018-03-28 20:42:51 1144
原创 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 1149
原创 图像多边形填充算法
算法原理: 参考连接:http://alienryderflex.com/polygon/,这里介绍得很详细,但是参考其中代码,实现下来,发现其中有一个bug,不知道是不是我自己的问题。 多边形绘制在原始图上: 为了高效,先确定多边形的坐标范围:typedef struct boundary_t{ int left; int right; int top...
2018-03-26 20:05:45 2620
原创 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 1952 2
原创 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 4092 1
原创 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 2730
原创 CUDA实现JPEG编码
JPEG编码流程图: 详细可以参考:www.eecg.toronto.edu/~moshovos/CUDA08/arx/JPEG_report.pdf 代码参考nvidia提供的例子,不过那个例子是先读取一张jpg图片,然后缩放(处理的是YV12格式的数据),最后编码。很多东西都混在一起,不便宜使用。现在就提取其中有用的,去掉缩放的功能。jpeg数据结构定义://量化表数据st
2018-01-17 13:11:41 10822 42
原创 CUDA实现图像二次线性插值缩放
原理: 参考:http://blog.csdn.net/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 4690
原创 YUV转RGB--使用MMX和CUDA优化
在http://blog.csdn.net/mikedai/article/details/64215860这篇博文中,采用查表的方式优化YUV转RGB,但是仍然没有发挥计算机硬件性能,对1920x1080的YV12格式,在intel i7-7700上测试120fps,也即是每帧耗时8ms。 采用mmx结合查找表优化,首先创建查找表,跟之前博文里有点不一样:static short Coeffi
2018-01-16 13:00:29 4960 6
原创 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 836
原创 CMYK转RGB
扫描仪的颜色空间一般为CMYK,从扫描仪上得到的图片如果是自己移植图片解码器, 一般需要将CMYK转换至RGB888。相关解释,参考国外资料: To understand the CMYK color model, it is best to start with an understanding of RGB color.The RGB color model is made up of
2018-01-15 12:42:14 6162
原创 RGB转YUV
C实现:void rgb24_to_nv12(uint8_t* data, int w, int h, uint8_t* yuv){ uint32_t row_bytes; uint8_t* uv; uint8_t* y; uint8_t r, g, b; uint8_t y_val, u_val, v_val; uint32_t off;
2018-01-15 12:28:37 997
原创 C实现椒盐噪声生成
实现代码如下:void salt_peper_noise(uint8_t* gray, int width, int height){ uint8_t* img; int i, j; int low; int h; int tmp; uint32_t n; img = gray; n = width * height; low
2017-09-21 23:25:35 2152
原创 C实现moore边界跟踪算法
原理: 参照冈萨雷斯数字图像处理英文版第11章第一小节。C实现代码如下:static uint8_t* enlarge_gray_img(uint8_t* img, int w, int h, int scale, int pad_value){ uint32_t dst_row_bytes; uint32_t src_row_bytes; uint32_t src_of
2017-09-21 21:57:06 2231
原创 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 2392
原创 C实现直方图匹配
原理: C实现图像直方图匹配 实现原理: 直方图匹配就是将目标图像的直方图变成指定的直方图。 由于直方图均衡可以把直方图变成概率上的均匀分布,所以,可以将原始直方图均衡,再将指定的直方图也均衡处理,理论上,两个直方图是相同的,然后再对均衡后的直方图按照指定的直方图均衡反映射,那么得到的图像就具有指定的直方图。公式推导如下: 首先,对图像进行直方图均衡 对于图像,由于灰度级是离散的,不
2017-03-29 17:37:02 2858
原创 C实现直方图均衡
灰度图像直方图: 8位灰度图计算机中的颜色表示范围0-255,共计256个值。如果把一张具体灰度图看成是一个样本空间,那么0-255可以看成256个事件,这256个事件的概率分布就是灰度图像的直方图。因此可以使用概率的一些理论来分析、修改灰度图。 图一是灰度图,图二是直方图,
2017-03-29 14:24:11 1237
原创 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 961
原创 zbar源码分析--技术关键点及优化策略
前面一篇文章已经说过zbar中QR的解码流程,现在这里主要介绍一些技术关键点和专注优化策略上的建议:仿射变换:已知三个点:(x1,y1)、(x2,y2)、(x3,y3),原点为(x1,y1),映射到(0,0)、(1,0)、(0,1)。没有采用高斯消元法求解线性方程,二是直接采用最终推导公式计算相关参数。1、计算三个点组成的行列式。2、使用克拉姆法则计算h1、h2、h4、h5,h3、h6是平移参
2017-03-24 10:17:41 3367 27
原创 zbar源码分析--QR解码过程分析
QR解码流程:运动均值去噪、二阶微分边缘检测、获取QR定位标志、生成finder pattern 聚类、计算相交的水平聚类和垂直聚类的中心、识别符号。定位搜索 运动均值阈值:先做水平扫描,再做垂直扫描。图像扫描是以Z字型模式逐行扫描,采用运动均值去噪,其中窗口大小为N=4。为了节省效率,在优化时,去掉边界检查。每扫描一行或一列需要做空白边处理。二阶微分边缘检测:1、对运动均值后图像做二阶
2017-03-24 09:58:47 6577 33
原创 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 2587 2
原创 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 1661
原创 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 1030
原创 C实现hough变换拟合直线
原理: 对于平面上的一个点(x1,y1),满足方程:y1=mx1+b,经过点(x1,y1)的直线有无数条,只要其满足刚才的直线方程。然而,可以把直线方程变形一下,b=-x1 m+y1,在考虑由点(m,b)组成的面,这里叫为参数空间,由(-x1, y1)确定一条直线。同样,由另外一个点(x2,y2)可以确定参数空间的一条直线,b2= -x2m+y2。如果这条直线不平行于b=-x1 m+y1,那么一定
2017-03-21 14:05:45 5715 6
原创 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 3187 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 1777
原创 从zbar中提取的bresenham算法
bresenham算法原理:直接截pdf图了:C代码如下:int bresenham(int _x00, int _y00, int _x01, int _y01){ int x0[2]; int x1[2]; int dx[2]; int step[2]; int steep; int err; int derr; x0[0] = _x0
2017-03-17 12:34:27 1527
原创 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 1475
原创 ffmpeg中缓冲代码分析
读包操作分析//链表元素结构体typedef struct MyAVPacketList { AVPacket pkt; struct MyAVPacketList *next;//指向下一个元素 int serial;} MyAVPacketList;//包队列,先进FIFO队列typedef struct PacketQueue { MyAVPack
2017-03-16 12:58:34 3267
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人