博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图像处理时用的卷积函数
阅读量:6957 次
发布时间:2019-06-27

本文共 2030 字,大约阅读时间需要 6 分钟。

  做图像处理,最耗时间的运算应该就是卷积运算那一步了。以后如果有机会在用c++做图像处理的项目的话,那么这个卷积部分还是要优化的。Matlab因为是验证算法,其实是没必要优化的。所以我就把卷积这一部分单独列出一个函数,用汇编实现了。我可是电子工程出身,汇编当然不在话下。

  函数是用汇编写的,用的是c++内嵌asm汇编,相同功能的c++代码也实现了,不过注释掉了,去掉注释能得到相同的结果。

  读和显示图像用了opencv函数库,话说上一个项目结束之后好像就没怎么用过这个库了,毕竟,单单调用库中的函数是没办法真正理解原理的。

#include 
#include "cv.h"#include "highgui.h"using namespace std;//*img是图像数据,i_h是图像的高,i_w是图像的宽//*m是卷积模板,m_h是模板的高,m_w是模板的宽//x,y是在图像(x,y)坐标处卷积//返回卷积的值int conv(int *img,int i_h,int i_w,int *m,int m_h,int m_w,int y,int x){ int re; int sum1; int sum2; int half_m_w; int half_m_h; int i; int j; int ii; int jj; __asm { mov re,0; mov sum1,0; mov sum2,0; mov eax,m_w; //half_m_w=(m_w-1)/2; dec eax; mov bl,2; div bl; mov ah,0; mov half_m_w,eax; mov eax,m_h; //half_m_h=(m_h-1)/2; dec eax; mov bl,2; div bl; mov ah,0; mov half_m_h,eax; mov ecx,m_w; //m_w*h_h imul   ecx,m_h; mov eax,0;label1: mov ebx,m; // for (i=0;i
height*image->width]; for (int i=0;i
height;i++) { for (int j=0;j
width;j++) { s=cvGet2D(image,i,j); img[i*image->width+j]=(int)s.val[0]; } } int *m; m=new int[9]; for (int i=0;i<9;i++) { m[i]=1; } for (int i=1;i
height-1;i++) { for (int j=1;j
width-1;j++) { s=cvGet2D(image,i,j); s.val[0]=conv(img,image->height,image->width,m,3,3,i,j); cvSet2D(image,i,j,s); } } cvNamedWindow("lena",1); cvShowImage("lena",image); cvWaitKey(0); cvReleaseImage(&image); cvDestroyAllWindows(); delete[] img; delete[] m; return 0;} 注:要是使用mmx,sse指令效果就更好了,可惜这个我不太熟悉。

转载于:https://www.cnblogs.com/tiandsp/archive/2012/11/28/2793442.html

你可能感兴趣的文章
利用STP生成树协议实现负载均衡
查看>>
给定一个串,去掉连续的重复字母,
查看>>
我的友情链接
查看>>
MSR2010配置小记
查看>>
微信video标签全屏无法退出bug
查看>>
[转]PostgreSQL 中文资料汇总
查看>>
那些被疯狂追求的女孩,后来怎么样了?
查看>>
(转载)Windows 7 Ultimate(旗舰版)SP1 32/64位官方原版下载(2011年5月12日更新版)...
查看>>
孟岩:通证(token)和通证经济的目的在于改善现有经济的效率性
查看>>
杜鹃演绎奢华春装大片
查看>>
mongoDb
查看>>
HTML框架1
查看>>
servlet:启动的时机
查看>>
笔记:2016-06-23
查看>>
5.22心得
查看>>
2017年11月27日高级软件测试技术例会记录
查看>>
最终增强
查看>>
C++ STL(1)
查看>>
socket编程
查看>>
浏览器渲染原理解析
查看>>