2008年11月23日


将图像转化成avi格式电影(bmp2avi,jpg2avi,tiff2avi等) - [Matlab]
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://darnshong.52blog.net/logs/2186961.html

 

  导师那有好些系列图像,想弄成电影。查了一下matlab的帮助,轻松地实现了,转化成avi格式电影!以下是代码:

function produceavifrompic(pfrom,pto,pext,navi)
aviobj = avifile(navi);
aviobj.Quality = 100;
aviobj.compression='None';
cola=0:1/255:1;
cola=[cola;cola;cola];%%黑白图像
cola=cola';
aviobj.colormap=cola;
for i=pfrom:pto
         fname=strcat(num2str(i),pext)
        adata=imread(fname);
    aviobj = addframe(aviobj,uint8(adata));
end
aviobj=close(aviobj);   

以上是将一系列8位黑白图像转化成avi格式电影,如果是彩色图像,则如下

function produceavifrompic(pfrom,pto,pext,navi)
aviobj = avifile(navi);
aviobj.Quality = 100;
aviobj.compression='None';
for i=pfrom:pto
       fname=strcat(num2str(i),pext)
       adata=imread(fname);
    aviobj = addframe(aviobj,uint8(adata));
end
aviobj=close(aviobj);   

挺简单的吧!快去试试!

=============================================
自己用的时候如下:在Matlab中一行行输入
aviobj = avifile(navi);
aviobj.Quality = 100;
aviobj.Fps = 10;
aviobj.compression='None';
for i=pfrom:pto   ;此处修改成自己的范围
       fname=strcat('snapshot',num2str(i),'.jpg')
       adata=imread(fname);
    aviobj = addframe(aviobj,uint8(adata));
end
aviobj=close(aviobj);   

OK。


 

posted @ 2008-11-23 15:04 美洲豹 阅读(1639) | 评论 (0)编辑 收藏


2008年10月16日

原来下载的Armadillo模型不可见,但可以导入且可以看到模型的相关信息。一直不知道是什么原因,还以为是格式不对,用Polytrans等工具转换过,但后来突然想到之前自己用3dsmax模型建的模型如果建的过大的话,也不能看到。因此,自己打开文件来看的时候,发现其顶点的位置值是大了一点,后来就想到看能否把模型缩小来查看,但是一直没有找到合适的工具,后来自己写了一个小程序,将顶点的XYZ值都按比例缩小,竟然可以了。
显示效果如下:

程序也不多,贴在下面

#include <iostream>
#include 
<fstream>
#include 
<string>
#include 
<algorithm>
using namespace std;


int main(int argc,char** argv)
{
    
if (argc < 4)
    
{
        cout
<<"usage: ScaleModel.exe [in modelName]  [outModelName] [percentage]"<<endl;
        
return 0
    }


    ifstream inStream;
    inStream.open(argv[
1],ios::in);
    ofstream outStream;
    outStream.open(argv[
2],ios::out);

    
string inString;
    
char ch;
    
float p0,p1,p2;
    
while (!inStream.eof() )
    
{
        
//getline(inStream,inString,"\n");
        getline(inStream,inString,'\n');
        
if(inString[0== 'v')
        
{
            sscanf(inString.c_str(),
"%c %f %f %f",&ch,&p0,&p1,&p2);
            
            p0 
*= atof(argv[3]);
            p1 
*= atof(argv[3]);
            p2 
*= atof(argv[3]);

            outStream
<<ch<<" "<<p0<<" "<<p1<<" "<<p2<<endl;
        }

        
else
        
{
            outStream
<<inString<<endl;
        }

    }

    
return 0;
}

posted @ 2008-10-16 12:29 美洲豹 阅读(237) | 评论 (0)编辑 收藏


2008年9月8日

[转]http://blog.csdn.net/java2000_net/archive/2008/08/29/2850290.aspx

转载 一位软件工程师的6年总结收藏

作者:成晓旭

“又是一年毕业时”,看到一批批学子离开人生的象牙塔,走上各自的工作岗位;想想自己也曾经意气风发、踌躇满志,不觉感叹万千……本文是自己工作6年的经 历沉淀或者经验提炼,希望对所有的软件工程师们有所帮助,早日实现自己的人生目标。本文主要是关于软件开发人员如何提高自己的软件专业技术方面的具体建 议,前面几点旨在确定大的方向,算是废话吧。

谨以此文献给那个自己为你奉献3年青春与激情的开发团队。还有团队成员:PPL、YT、YK 、TYF、LGL、CHL、CDY、CB、DPD。

1、 分享第一条经验:“学历代表过去、能力代表现在、学习力代表未来。”其实这是一个来自国外教育领域的一个研究结果。相信工作过几年、十几年的朋友对这个道 理有些体会吧。但我相信这一点也很重要:“重要的道理明白太晚将抱憾终生!”所以放在每一条,让刚刚毕业的朋友们早点看到哈!

2、 一定要确定自己的发展方向,并为此目的制定可行的计划。不要说什么,“我刚毕业,还不知道将来可能做什么?”,“跟着感觉走,先做做看”。因为,这样的观 点会通过你的潜意识去暗示你的行为无所事事、碌碌无为。一直做技术,将来成为专家级人物?向管理方向走,成为职业经理人?先熟悉行业和领域,将来自立门 户?还是先在行业里面混混,过几年转行做点别的?这很重要,它将决定你近几年、十年内“做什么事情才是在做正确的事情!”。

3、 软件开发团队中,技术不是万能的,但没有技术是万万不能的!在技术型团队中,技术与人品同等重要,当然长相也比较重要哈,尤其在MM比较多的团队中。在软 件项目团队中,技术水平是受人重视和尊重的重要砝码。无论你是做管理、系统分析、设计、编码,还是产品管理、测试、文档、实施、维护,多少你都要有技术基 础。算我孤陋寡闻,我还真没有亲眼看到过一个外行带领一个软件开发团队成功地完成过软件开发项目,哪怕就一个,也没有看到。倒是曾经看到过一个“高学历的 牛人”(非技术型)带一堆人做完过一个项目,项目交付的第二天,项目组成员扔下一句“再也受不了啦!”四分五裂、各奔东西。那个项目的“成功度”大家可想 而知了。

4、 详细制定自己软件开发专业知识学习计划,并注意及时修正和调整(软件开发技术变化实在太快)。请牢记:“如果一个软件开发人员在1、2年内都没有更新过自 己的知识,那么,其实他已经不再属于这个行业了。”不要告诉自己没有时间。来自时间管理领域的著名的“三八原则”告诫我们:另外的那8小时如何使用将决定 你的人生成败!本人自毕业以来,平均每天实际学习时间超过2小时。

5、 书籍是人类进步的阶梯,对软件开发人员尤其如此。书籍是学习知识的最有效途径,不要过多地指望在工作中能遇到“世外高人”,并不厌其烦地教你。对于花钱买 书,我个人经验是:千万别买国内那帮人出的书!我买的那些家伙出的书,!00%全部后悔了,无一本例外。更气愤的是,这些书在二手市场的地摊上都很难卖 掉。“拥有书籍并不表示拥有知识;拥有知识并不表示拥有技能;拥有技能并不表示拥有文化;拥有文化并不表示拥有智慧。”只有将书本变成的自己智慧,才算是 真正拥有了它。

6、 不要仅局限于对某项技术的表面使用上,哪怕你只是偶尔用一、二次。“对任何事物不究就里”是任何行业的工程师所不应该具备的素质。开发Windows应用 程序,看看Windows程序的设计、加载、执行原理,分析一下PE文件格式,试试用SDK开发从头开发一个Windows应用程序;用VC++、 Delphi、Java、.Net开发应用程序,花时间去研究一下MFC、VCL、J2EE、.Net它们框架设计或者源码;除了会用J2EE、 JBoss、Spring、Hibernate等等优秀的开源产品或者框架,抽空看看大师们是如何抽象、分析、设计和实现那些类似问题的通用解决方案的。 试着这样做做,你以后的工作将会少遇到一些让你不明就里、一头雾水的问题,因为,很多东西你“知其然且知其所以然”!

7、 在一种语言上编程,但别为其束缚了思想。“代码大全”中说:“深入一门语言编程,不要浮于表面”。深入一门语言开发还远远不足,任何编程语言的存在都有其 自身的理由,所以也没有哪门语言是“包治百病”的“灵丹妙药”。编程语言对开发人员解决具体问题的思路和方式的影响与束缚的例子俯拾皆是。我的经验是:用 面对对象工具开发某些关键模块时,为什么不可以借鉴C、C51、汇编的模块化封装方式?用传统的桌面开发工具(目前主要有VC++、Delphi)进行系 统体统结构设计时,为什么不可以参考来自Java社区的IoC、AOP设计思想,甚至借鉴像Spring、Hibernate、JBoss等等优秀的开源 框架?在进行类似于实时通信、数据采集等功能的设计、实现时,为什么不可以引用来自实时系统、嵌入式系统的优秀的体系框架与模式?为什么一切都必须以个 人、团队在当然开发语言上的传统或者经验来解决问题???“他山之石、可以攻玉”。

8、 养成总结与反思的习惯,并有意识地提炼日常工作成果,形成自己的个人源码库、解决某类问题的通用系统体系结构、甚至进化为框架。众所周知,对软件开发人员 而言,有、无经验的一个显著区别是:无经验者完成任何任务时都从头开始,而有经验者往往通过重组自己的可复用模块、类库来解决问题(其实这个结论不应该被 局限在软件开发领域、可以延伸到很多方面)。这并不是说,所有可复用的东西都必须自己实现,别人成熟的通过测试的成果也可以收集、整理、集成到自己的知识 库中。但是,最好还是自己实现,这样没有知识产权、版权等问题,关键是自己实现后能真正掌握这个知识点,拥有这个技能。

9、 理论与实践并重,内外双修。工程师的内涵是:以工程师的眼光观察、分析事物和世界。一个合格的软件工程师,是真正理解了软件产品的本质及软件产品研发的思 想精髓的人(个人观点、欢迎探讨)。掌握软件开发语言、应用语言工具解决工作中的具体问题、完成目标任务是软件工程师的主要工作,但从软件工程师这个角度 来看,这只是外在的东西,并非重要的、本质的工作。学习、掌握软件产品开发理论知识、软件开发方法论,并在实践中理解、应用软件产品的分析、设计、实现思 想来解决具体的软件产品研发问题,才是真正的软件工程师的工作。站在成熟理论与可靠方法论的高度思考、分析、解决问题,并在具体实践中验证和修正这些思想 与方式,最终形成自己的理论体系和实用方法论。

10、心态有多开放,视野就有多开阔。不要抱着自己的技术和成果,等到它们都已经过时变成垃圾了,才拿出来丢人现眼。请及时发布自己的研究成果:开发的产 品、有创意的设计或代码,公布出来让大家交流或者使用,你的成果才有进化和升华的机会。想想自己2000年间开发的那些Windows系统工具,5、6年 之后的今天,还是那个样子,今天流行的好多Windows系统工具都比自己的晚,但进化得很好,且有那么多用户在使用。并且,不要保守自己的技术和思想, 尽可能地与人交流与分享,或者传授给开发团队的成员。“与人交换苹果之后,每个人还是只有一个苹果;但交换思想之后,每个人都拥有两种思想”,道理大家都 懂,但有多少人真正能做到呢?

11、尽量参加开源项目的开发、或者与朋友共同研制一些自己的产品,千万不要因为没有钱赚而不做。网络早已不再只是“虚拟世界”,网上有很多的开源项目、 合作开发项目、外包项目,这都是涉猎工作以外的知识的绝好机会,并且能够结识更广的人缘。不要因为工作是做ERP,就不去学习和了解嵌入式、实时、通信、 网络等方面的技术,反过来也是一样。如果当他别人拿着合同找你合作,你却这也不会,那也不熟时,你将后悔莫及。

12、书到用时方恨少,不要将自己的知识面仅仅局限于技术方面。诺贝尔经济学奖得主西蒙教授的研究结果表明: “对于一个有一定基础的人来说,他只要真正肯下功夫,在6个月内就可以掌握任何一门学问。”教育心理学界为感谢西蒙教授的研究成果,故命名为西蒙学习法。 可见,掌握一门陌生的学问远远没有想想的那么高难、深奥。多方吸取、广泛涉猎。极力夯实自己的影响圈、尽量扩大自己的关注圈。财务、经济、税务、管理等等 知识,有空花时间看看,韬光养晦、未雨绸缪。

13、本文的总结与反思: 不要去做技术上的高手,除非你的目标如此。虽然本文是关于提高软件开发知识的建议,做技术的高手是我一向都不赞同的。你可以提高自己的专业知识,但能胜任 工作即止。提高软件知识和技术只是问题的表面,本质是要提高自己认识问题、分析问题、解决问题的思想高度。软件专业知识的很多方法和原理,可以很容易地延 伸、应用到生活的其它方面。在能胜任工作的基础上,立即去涉猎其它领域的专业知识,丰富自己的知识体系、提高自己的综合素质,尤其是那些目标不在技术方面 的朋友


posted @ 2008-09-08 11:05 美洲豹 阅读(366) | 评论 (1)编辑 收藏


2008年9月5日

http://www.hebl.name/zh/archives/linuxtv.html

posted @ 2008-09-05 10:06 美洲豹 阅读(195) | 评论 (0)编辑 收藏


2008年9月3日

http://www.rakkarsoft.com/raknet/manual/RakNetMajorFeatures.html

http://www.cnblogs.com/ArenAK/news/2008/01/27/1055207.html

有时间要看下了.

posted @ 2008-09-03 16:12 美洲豹 阅读(338) | 评论 (0)编辑 收藏


2008年9月1日

     摘要:       大连的饭店——吃遍大连 (转自http://www.cnblogs.com/SGSoft/archive/2004/08/26/36821.html),可惜了,上次去之前没有搜到这个东西,少吃了好多.呵呵,不过上次去也玩得比较爽,呵          ...  阅读全文

posted @ 2008-09-01 14:18 美洲豹 阅读(249) | 评论 (0)编辑 收藏


2008年8月16日

  原来以为NSIS用来制作安装程序会很难,后来通过一上午的搜索及试验后,发现用HM NSIS Editor的Wizard基本上可以生成一个完整的安装程序,后来想到OgreSDK也是用NullSoft Installer制作的,查看其源代码,发现有个WriteEnvStr.nsh可以直接拿来用,这样的话,可以自己加入程序的环境变量。如

在用HM NSIS Editor生成的基本脚本的Section –Post中加入如下代码

       Push “OGRE_HOME”

       Push $INSTDIR

       Call WriteEnvStr

       #改变Path变量,将dll导入以便运行程序

       Push “PATH”

       Push %PATH%$INSTDIR\Dll   ;将可执行程序的路径加入。

       Call WriteEnvStr

制作升级包也容易了,只需要用ReadEnvStr读环境变量,然后将安装路径设成所读的环境变量。

   Function .onInit

ReadEnvStr $R0 "OGRE_HOME"

#MessageBox MB_OK $R0

Strcmp $R0 ""  0  NOABORT

         MessageBox MB_OK "没有找到之前安装的OGRE"

NOABORT:

Strcpy $INSTDIR $R0

FunctionEnd

这样的话,则可以通过查询环境变量判断是否安装成功,再安装升级包。
原来以为要自己手动写脚本,后来发现用向导可生成一个基本可用的脚本,这就方便了。

posted @ 2008-08-16 12:41 美洲豹 阅读(565) | 评论 (0)编辑 收藏


2007年1月16日

1. The Layout Management?
2. The Meta-Object System explain.
3. The signal-slot mechnism explain.
4. A project to expriment all the features.
5. The class Overview and are there some framework for development ?

(to be continuted..)

posted @ 2007-01-16 23:34 美洲豹 阅读(204) | 评论 (0)编辑 收藏

vim FAQ

Linux /linuxman 
转自水木清华:VIM FAQ

转贴如下:


(1) 为什么别人的方法在我这里行不通?
(2) 如何找到上次编辑的文件?
(3) 如何复制粘贴?
(4) 如何在多个文件中进行替换?
(5) 如何把fold一次全部打开?
(6) 如何选择、复制或者查找光标所在的单词?
(7) 如何计数搜索的字符串?
(8) 如何去掉高亮搜索?
(9) 如何解决linux下gvim中文菜单乱码的问题?
(10) 如何对所编辑的文件语法高亮显示?
(11) 如何快速插入多行数字0-99?
(12) 如何设置中文编码?
(13) 如何去掉或者插入^M这样的字符?
(14) 如何整体缩进一段代码(插入tab)?
(15) 如何合并两行?
(16) 如何设置缩进距离(tab宽度)?

==============================================================================
(1) 为什么别人的方法在我这里行不通?

估计这是最难回答的一个问题了。:-)
不过首先应该确定你的VIM版本是否足够新,功能是否完整。使用 :version 命令查看你
的VIM版本以及功能。一个常见的情况,如果你用的是RedHat系统,请确定安装了
vim-enhance的rpm包,否则将是不完整的VIM。

(2) 如何找到上次编辑的文件?

Ctrl+O (按两次)

(3) 如何复制粘贴?

复制
方法一:先ma标记当前位置为a,移动到新的位置,再y`a或者y''a复制从标记位置a到
当前位置的内容。`和''的区别:`以字符为单位,''以行为单位。这个方法应该是所有vi
都适用的。(如果不对请指正。)
方法二:按v或V或Ctrl+V进入visual模式,移动光标选择一段内容,按y。三者的区别:
v以字符为单位,V以行为单位,Ctrl+V是块选择。这个方法只在VIM下适用。

粘贴
p或P。区别:前者粘贴到光标后面,后者粘贴到光标前面。

(4) 如何在多个文件中进行替换?

一般可以用sed或者vim来做。比如要对当前目录下的*.c文件进行替换:
方法一:
for i in *.c; do
  sed -i -e ''s/oldvalue/newvalue/g'' $i
done
方法二:
vim *.c
:argdo %s/oldvalue/newvalue/g

(5) 如何把fold一次全部打开?

zR 或者 :set foldlevel=999

(6) 如何选择、复制或者查找光标所在的单词?

在VIM中用iw或者aw表示一个单词,两者稍有区别。
选择光标所在的单词:viw (v进入visual模式,然后iw)
复制光标所在的单词:yiw

查找的话就是两个很常用的明令:# 和 *

(7) 如何计数搜索的字符串?

如果需要统计缓冲中一个模式(pattern)出现的频率,需要把 ''report'' 置为0,然后
用替换命令把模式替换成它自己。Vim 报告的已替换的数目就是模式出现的次数。例:
        :set report=0
        :%s/./&/g               characters
        :%s/i+/&/g            words
        :%s/^                   lines
        :%s/the/&/g             "the" anywhere
        :%s/<the>/&/g         "the" as a word
你可能希望复位 ''hlsearch'' 或者使用 ":nohlsearch"。

(8) 如何去掉高亮搜索?

方法一::nohlsearch
方法二:/awertgvcxz (查找一个肯定不存在的字符串)
设置了高亮搜索(:set hlsearch)以后,可以通过 :set nohlsearch 永久地关闭高亮
显示,也可以通过 :nohlsearch 暂时关闭高亮显示,下次搜索时将自动恢复高亮。

(9) 如何解决linux下gvim中文菜单乱码问题?

以vim6.3为例
:source $VIMRUNTIME/delmenu.vim
:source $VIMRUNTIME/menu.vim

也可以将以上内容加入.vimrc

光source一个menu.vim或者啥也不source都是乱码
另外,也有网友报告说没有遇到此类问题

注:这里的source指的是vim自己的source命令,和bash shell的source无关

(10) 如何对所编辑的文件语法高亮显示?

需要解释的是,VI有很多变种,它本身并没有这种功能,提供这种功能
往往是其各种衍生版本,比如说vim。下面就vim中如何语法高亮简单解释一下。

首先,确定一下你所用的操作系统,如果是windows,那么默认的配置文件
就可以工作了。如果还不行,可以用鼠标从syntax菜单下选择一下适合你的
文件类型(新版本的gvim默认把文件类型选择关闭了,需要点开,然后按照
开头字母选择类型)
如果是linux,那么确认一下是否是redhat。如果是redhat,那么需要安装
vim-enhanced的rpm包。这些都做了以后,可以用:syntax on来打开语法高亮。
必要时可以用:set filetype=...来设定你的文件类型。
如果使用图形界面,比如gvim,那么syntax on和set filetype的操作可以
用鼠标在菜单中选择,同windows下。
如果是在控制台中使用vim,还应当确定你的终端设置支持颜色。

(11) 如何快速插入多行数字0-99?

在命令行中输入以下代码,或者先把代码保存到一个外部文件,然后source这个文件:
let i = 0
while i < 100
  put = i
  let i = i + 1
  endw
如果位数不足需要在前面补零,可以用Ctrl-V块选择,然后I插入0。

(12) 如何设置中文编码?

在.vimrc中作如下设置,可以实现界面以及显示字体采用gb2312,遇到utf8文件时
自动做转换:
set encoding=prc
set fileencoding=prc
set fileencodings=utf8,prc
需要注意的是,按照上面的设置,如果你打开一个空的(0字节)或者是纯7bits的文件,
这时VIM将认为是utf8编码的文件,如果你往里面输入中文,存盘的时候也将是utf8。
因此你可能需要在存盘之前 :set fileencoding=prc 把编码改回来。
另外,对于纯7bits的文件,由于认成了utf8,每次打开存盘的时候都要做一次转换,
会比较慢,所以如果你很长一段时间不会接触utf8的话,可能暂时把 fileencodings
一行注释掉比较好。
[警告]:转换可能会造成信息丢失!如果你需要编辑的是重要的系统文件,最好把
fileencodings 一行暂时注释掉。

(13) 如何去掉或者插入^M这样的字符?

在VIM的插入模式或者命令行中用<C-V>输入^M这样的特殊字符,例如输入
:s/<C-V><C-M>//g
实际显示是
:s/^M//g
就可以去掉文件中所有的^M。同理,要在文件中输入^M只要按<C-V><C-M>即可。

这个问题往往发生在WINDOWS/DOS系统和UNIX系统之间交换文件时,因为这两类系统
对于文本的“换行”概念解释不同。所以,还有一个解决方法就是对这类文本进行
转换。vim内部就可以做这件事情。首先打开文本,然后
set fileformat=unix
再从新保存该文件覆盖原文件就可以去除:^M了

(14) 如何整体缩进一段代码(插入tab)?

选中一段代码,< 或 > 或 2< 或 3> ……

(15) 如何合并两行?

合并两行的键是 J
另外,如果你设置了
set backspace=2
你就可以用backspace或者delete很方便的删到上一行或者下一行。

(16) 如何设置缩进距离(tab宽度)?

set tabstop=8
set shiftwidth=8

posted @ 2007-01-16 23:31 美洲豹 阅读(479) | 评论 (0)编辑 收藏


2006年11月7日

http://www.wotsit.org/
 包含所有的格式,很有参考价值。

posted @ 2006-11-07 00:46 美洲豹 阅读(211) | 评论 (0)编辑 收藏


仅列出标题  下一页

posts - 15, comments - 2, trackbacks - 0, articles - 29

Copyright © 美洲豹