顶帽变化(转载)

  顶帽变化代码(VC实现)

  1     void CISLSView::OnTopHatA()
  2     {
  3         //顶帽变换
  4         //李立宗  [email protected]
  5         //2012-8-23
  6         CImage topHatImage;
  7         OnOpeningGray();
  8         int maxY = myImage1.GetHeight();
  9         int maxX=myImage1.GetWidth();
 10         byte* pRealData1;
 11         byte* pRealData2;
 12         pRealData1=(byte*)myImage1.GetBits();
 13         pRealData2=(byte*)myImage2.GetBits();
 14         int pit1=myImage1.GetPitch();
 15         int pit2=myImage2.GetPitch();
 16         int bitCount1=myImage1.GetBPP()/8;
 17         int bitCount2=myImage2.GetBPP()/8;
 18         int tempMyImage1,tempMyImage2,temp;
 19         for (int y=0; y<maxY; y++) {
 20             for (int x=0; x<maxX; x++) {
 21                 tempMyImage1=*(pRealData1+pit1*(y)+(x)*bitCount1);
 22                 tempMyImage2=*(pRealData2+pit2*(y)+(x)*bitCount2);
 23                 temp=tempMyImage1-tempMyImage2;
 24                 *(pRealData2+pit2*(y)+(x)*bitCount2)=temp;
 25                 *(pRealData2+pit2*(y)+(x)*bitCount2+1)=temp;
 26                 *(pRealData2+pit2*(y)+(x)*bitCount2+2)=temp;
 27
 28             }
 29         }
 30         Invalidate();
 31     }
 32
 33
 34     void CISLSView::OnTopHatB()
 35     {
 36         //顶帽变换
 37         //李立宗  [email protected]
 38         //2012-8-23
 39         CImage topHatImage;
 40         OnOpeningGray();
 41         int maxY = myImage1.GetHeight();
 42         int maxX=myImage1.GetWidth();
 43         byte* pRealData1;
 44         byte* pRealData2;
 45         pRealData1=(byte*)myImage1.GetBits();
 46         pRealData2=(byte*)myImage2.GetBits();
 47         int pit1=myImage1.GetPitch();
 48         int pit2=myImage2.GetPitch();
 49         int bitCount1=myImage1.GetBPP()/8;
 50         int bitCount2=myImage2.GetBPP()/8;
 51         int tempMyImage1,tempMyImage2,temp;
 52         for (int y=0; y<maxY; y++) {
 53             for (int x=0; x<maxX; x++) {
 54                 tempMyImage1=*(pRealData1+pit1*(y)+(x)*bitCount1);
 55                 tempMyImage2=*(pRealData2+pit2*(y)+(x)*bitCount2);
 56                 temp=tempMyImage1-tempMyImage2;
 57                 temp=abs(temp);
 58                 *(pRealData2+pit2*(y)+(x)*bitCount2)=temp;
 59                 *(pRealData2+pit2*(y)+(x)*bitCount2+1)=temp;
 60                 *(pRealData2+pit2*(y)+(x)*bitCount2+2)=temp;
 61
 62             }
 63         }
 64         Invalidate();
 65     }
 66
 67
 68     void CISLSView::OnTopHatC()
 69     {
 70         //顶帽变换
 71         //李立宗  [email protected]
 72         //2012-8-23
 73         CImage topHatImage;
 74         OnClosingGray();
 75         int maxY = myImage1.GetHeight();
 76         int maxX=myImage1.GetWidth();
 77         byte* pRealData1;
 78         byte* pRealData2;
 79         pRealData1=(byte*)myImage1.GetBits();
 80         pRealData2=(byte*)myImage2.GetBits();
 81         int pit1=myImage1.GetPitch();
 82         int pit2=myImage2.GetPitch();
 83         int bitCount1=myImage1.GetBPP()/8;
 84         int bitCount2=myImage2.GetBPP()/8;
 85         int tempMyImage1,tempMyImage2,temp;
 86         for (int y=0; y<maxY; y++) {
 87             for (int x=0; x<maxX; x++) {
 88                 tempMyImage1=*(pRealData1+pit1*(y)+(x)*bitCount1);
 89                 tempMyImage2=*(pRealData2+pit2*(y)+(x)*bitCount2);
 90                 temp=tempMyImage1-tempMyImage2;
 91                 *(pRealData2+pit2*(y)+(x)*bitCount2)=temp;
 92                 *(pRealData2+pit2*(y)+(x)*bitCount2+1)=temp;
 93                 *(pRealData2+pit2*(y)+(x)*bitCount2+2)=temp;
 94
 95             }
 96         }
 97         Invalidate();
 98     }
 99
100
101     void CISLSView::OnTopHatD()
102     {
103         //顶帽变换
104         //李立宗  [email protected]
105         //2012-8-23
106         CImage topHatImage;
107         OnClosingGray();
108         int maxY = myImage1.GetHeight();
109         int maxX=myImage1.GetWidth();
110         byte* pRealData1;
111         byte* pRealData2;
112         pRealData1=(byte*)myImage1.GetBits();
113         pRealData2=(byte*)myImage2.GetBits();
114         int pit1=myImage1.GetPitch();
115         int pit2=myImage2.GetPitch();
116         int bitCount1=myImage1.GetBPP()/8;
117         int bitCount2=myImage2.GetBPP()/8;
118         int tempMyImage1,tempMyImage2,temp;
119         for (int y=0; y<maxY; y++) {
120             for (int x=0; x<maxX; x++) {
121                 tempMyImage1=*(pRealData1+pit1*(y)+(x)*bitCount1);
122                 tempMyImage2=*(pRealData2+pit2*(y)+(x)*bitCount2);
123                 temp=tempMyImage1-tempMyImage2;
124                 temp=abs(temp);
125                 *(pRealData2+pit2*(y)+(x)*bitCount2)=temp;
126                 *(pRealData2+pit2*(y)+(x)*bitCount2+1)=temp;
127                 *(pRealData2+pit2*(y)+(x)*bitCount2+2)=temp;
128
129             }
130         }
131         Invalidate();
132     }
时间: 2024-10-13 08:53:29

顶帽变化(转载)的相关文章

HttpClient 版本变化 转载

转载地址:http://my.oschina.net/u/577453/blog/173724 最近用到了HttpClient写爬虫,可能我有新版本强迫症,老是喜欢用新版本的东西(虽说新版本不一定好用),然后就用了HttpClient 4.3.HttpClient这货和Lucene一样,每个版本的API都变化很大,这有点让人头疼.就好比创建一个HttpClient对象吧,每一个版本的都不一样, 3.X是这样的 HttpClient httpClient=new DefaultHttpClient

同态滤波(Homomorphic filtering)

引言 一副图像f(x,y)可以表示为其照度分量i(x,y)和反射分量r(x,y)的乘积,由于照度相对变化很小,可以看作是图像的低频成份,而反射率则是高频成份.通过分别处理照度和反射率对像元灰度值的影响,达到揭示阴影区细节特征的目的. 算法 对于一副图像f(x,y)可由照射分量i(x,y)和反射分量r(x,y)的乘积,即 f(x,y)=i(x,y)r(x,y) 上式不能直接用于对照度和反射的频率分量进行操作,因此上式取对数 Inf(x,y)=lni(x,y)+lnr(x,y) 对上式两边取傅里叶变

树状数组求区间最值

树状数组求区间最值 树状数组(Binary Index Tree)利用二进制的一些性质巧妙的划分区间,是一种编程,时间和空间上都十分理想的求区间和的算法,同样我们可以利用树状数组优美的区间划分方法来求一个序列的最值 约定以 num[]  表示原数组, 以 idx[] 表示索引数组, Lowbit(x)=x&(-x) 树状数组求和时通过构造数组 idx[] 使 idx[k]=sum(num[tk]), tk [k-Lowbit(k)+1,k], 使用同样的方法构造最值索引数组: 以最大值为例, 先

Listview性能优化

首先,虽然大家都知道,还是提一下,利用好 convertView 来重用 View,切忌每次 getView() 都新建.ListView 的核心原理就是重用 View.ListView 中有一个回收器,Item 滑出界面的时候 View 会回收到这里,需要显示新的 Item 的时候,就尽量重用回收器里面的 View. 利用好 View Type,例如你的 ListView 中有几个类型的 Item,需要给每个类型创建不同的 View,这样有利于 ListView 的回收,当然类型不能太多: 尽

Kubernetes -- Horizontal Pod Autoscaler

前言 在kubernetes中,我们使用pod对外提供服务.这时候,我们需要以下两种情形需要关注: pod因为不明原因挂掉,导致服务不可用 Pod在高负荷的情况下,不能支撑我们的服务 如果我们人工监控pods,人工进行调整副本那么这个工作量无疑是巨大的,但kubernetes已经有了相应的机制来应对了. 那么今天就来介绍一下在k8s 1.6中的弹性伸缩的实施 k8s是kubernetes的官方简称HPA全称Horizontal Pod Autoscaler HPA的原理 Kubernetes有一

【转载】使用信号监控 Django 模型对象字段值的变化

转载出处:http://blog.csdn.net/pushiqiang/article/details/74949465 Django 信号 (Signals) 的功能类似于 WordPress 的动作 (action),用于为项目全局增加事件的广播 (dispatch) 与接收 (receive) 机制.其中,灵活使用其内置的模型信号 (Model Signals) 的接收功能就可以监控大部分模型对象 (Model instances) 的变化.因为不需要修改模型本身的代码,在进行跨应用 (

一家VC支持企业的发展轨迹&mdash;&mdash;了解每次融资后股权的变化,以及股份是如何被稀释的【转载】

来源:ReachVc 如果你是一个不太了解融资的创业者,那么本文将对你很有用.通过武林外传同福客栈的例子,了解每次融资后股权的变化,以及股份是如何被稀释的. 话说,在闻名天下的关中七侠镇,有个叫做吕轻侯的创业者,他是个知识分子--落难秀才,因为找不到工作,所以在七侠镇镇政府的鼓励下开始创业,开了一家客栈--同福客栈.但由于客栈只提供单一的客房服务,再加上吕秀才自身的工作能力也不足,而且团队严重短缺--就他自己一个人,所以生意很一般,都快要关门大吉了.当然,作为这家创业公司的唯一创始人及员工,吕秀

【转载】实时监听输入框值变化的完美方案:oninput &amp; onpropertychange

oninput 是 HTML5 的标准事件,对于检测 textarea, input:text, input:password 和 input:search 这几个元素通过用户界面发生的内容变化非常有用,在内容修改后立即被触发,不像 onchange 事件需要失去焦点才触发.oninput 事件在主流浏览器的兼容情况如下: 从上面表格可以看出,oninput 事件在 IE9 以下版本不支持,需要使用 IE 特有的 onpropertychange 事件替代,这个事件在用户界面改变或者使用脚本直接

Java 终于有 Lambda 表达式啦~Java 8 语言变化&mdash;&mdash;Lambda 表达式和接口类更改【转载】

原文地址 en cn 下载 Demo Java? 8 包含一些重要的新的语言功能,为您提供了构建程序的更简单方式.Lambda 表达式 为内联代码块定义一种新语法,其灵活性与匿名内部类一样,但样板文件要少得多.接口更改使得接口可以添加到现有接口中,同时又不会破坏与现有代码的兼容性.本文将了解这些更改是如何协同工作的. Java 8 的最大变化在于添加了对 lambda 表达式 的支持.Lambda 表达式是可按引用传递的代码块.类似于一些其他编程语言中的闭包:它们是实现某项功能的代码,可接受一个