文档库 最新最全的文档下载
当前位置:文档库 › 从VC6到VC9移植代码问题总结收藏

从VC6到VC9移植代码问题总结收藏

从VC6到VC9移植代码问题总结收藏
从VC6到VC9移植代码问题总结收藏

从VC6到VC9移植代码问题总结收藏

首先可以直接用Visual Studio 2008的打开VC6的工作区文件和项目文件(dsw和dsp),并将其升级为VS2008的解决方案格式和项目格式(sln和vcproj),VC9的编译器相对于VC6有了很大的变化,一些编译参数和链接参数被废弃(比如/map:line),有一些改变了名称,还有新增的选项,不过不用担心,升级过程会自动对其进行转换,最终都会得到一个正确的解决方案和VC项目文件,这个过程不会遇到太多的麻烦,问题都出在随后的编译过程中,下面就将我在移植的过程中遇到的问题和我的解决方法总结一下,希望对还在用VC6维护代码的朋友有所帮助。

一、_WIN32_WINNT 与_WIN32_IE 设置冲突

_WIN32_WINNT 与_WIN32_IE设置不兼容会导致如下C1189致命错误:

StdAfx.cpp

c:\program files\microsoft sdks\windows\v6.0a\include\sdkddkver.h(217) : fatal error C1189: #error : _WIN32_WINNT settings conflicts with _WIN32_IE setting

StdAfx.cpp通常是项目中第一个编译的文件,这个错误将导致编译无法继续进行。产生这个错误的原因是原因是_WIN32_WINNT的版本定义太老,老的VC代码对_WIN32_WINNT 的典型设置是:

#ifndef _WIN32_WINNT

#define _WIN32_WINNT 0x0400

#endif

0x0400相对于VS2008所带的Plarform SDK(在文件sdkddkver.h中)中_WIN32_IE的定义来说太老了,导致不兼容,可以将其改成0x0501或更高的版本避免这个问题,如下所示:

#ifndef _WIN32_WINNT

#define _WIN32_WINNT 0x0501

#endif

也可以将这三行_WIN32_WINNT定义删除,这样就会使用Plarform SDK中的_WIN32_WINNT定义,自然就不存在不兼容问题了。不过出于对老版本VC的兼容考虑(毕竟以后可能还要使用VC6编译代码),最好这样修改:

#if _MSC_VER <= 1200 // MFC 6.0 or earlier

#ifndef _WIN32_WINNT

#define _WIN32_WINNT 0x0400

#endif

#endif

二、afximpl.h文件中的语法错误

MFC出现的时候STL还没有成为C++的标准,所以MFC使用一套自己的模版库,比如CArray、CList、CMap等等,这些类型声明都在afximpl.h文件中。原来在VC6编译器适用的模版语法可能不适用VC9,特别是当以下四个环境变量设置不兼容时,就会出现这个编译错误,大致情况如下:

e:\software\microsoft visual studio 9.0\vc\atlmfc\src\mfc\afximpl.h(625) : error C2059: syntax error : ''

e:\software\microsoft visual studio 9.0\vc\atlmfc\src\mfc\afximpl.h(625) : error C2238: unexpected token(s) preceding ';'

e:\software\microsoft visual studio 9.0\vc\atlmfc\src\mfc\afximpl.h(629) : error C2059: syntax error : ''

e:\software\microsoft visual studio 9.0\vc\atlmfc\src\mfc\afximpl.h(629) : error C2238: unexpected token(s) preceding ';'

合理调整stdafx.h中WINVER、_WIN32_WINNT、_WIN32_WINDOWS和_WIN32_IE的设置可以避免这个问题,将三个与Windows版本有关的环境变量设置为0x0501或更高版本,将IE版本的环境变量设置为0x0500以后的版本就可以解决这个问题。当然,考虑到与旧的VC6代码兼容,可以采用上一个问题中提到的最后一个解决办法,用_MSC_VER进行隔离。

三、旧的CR T库和新的安全CRT库引起的C4996告警

解决了环境变量设置不匹配导致的问题后,编译过程就真正开始了,不过首先映入眼帘的应该是成堆的C4996编译告警,对每个使用了含字符串参数的CRT库函数都会有C4996编译告警,一个典型的输出如下所示:

f:\project\.....\commonfunc.cpp(280) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

e:\software\microsoft visual studio 9.0\vc\include\string.h(74) : see declaration of 'strcpy'

MSDN online 是这样解释的:为了显著增加CRT库的安全性,许多CRT函数都有了一个更安全的新版本,新版本和旧版本的区别就是新版本函数名多了一个_s后缀。只要一个CRT 函数有新的安全版本,编译器就会产生一个C4996告警,不过,出现这个告警的目的并不是说旧版本的CRT函数将淡出CRT库,告警出现只是为了提醒程序员这个函数有更安全的版本存在。一种安全的或者是被鼓励的做法是用安全版本的函数替换现有的CRT函数,不过对于一个有相当代码量的项目,替换工作量也是巨大的,这可不是用名称查找、替换就能简单解决的问题,因为许多安全版本的CRT函数参数个数也发生了变化。也可以用预处理指令消除这个告警:

#pragma warning( disable : 4996 )

或者定义_CRT_SECURE_NO_WARNINGS 压制这个告警(在stdafx.h中define或在项目

属性中设置预处理符号,PreProcessor Definitions)。

除了C语言的CRT函数外,POSIX 兼容函数也存在这个告警,解决方法是用POSIX标准名称替换(比如access换成_access)或者是定义_CRT_NONSTDC_NO_WARNINGS 压制这个告警(方法同上)。

四、“CWinApp::Enable3dControls”引起的C4996告警

这个是编译使用了老的向导生成的MFC代码时遇到的问题,一个典型的告警信息输出如下所示:

CrpFileCrack.cpp

f:\project\.....\crpfilecrack.cpp(52) : warning C4996: 'CWinApp::Enable3dControls': CWinApp::Enable3dControls is no longer needed. Y ou should remove this call.

e:\software\microsoft visual studio 9.0\vc\atlmfc\include\afxwin.h(4818) : see declaration of 'CWinApp::Enable3dControls'

通常向导生成的代码是:

#ifdef _AFXDLL

Enable3dControls(); // Call this when using MFC in a shared DLL

#else

Enable3dControlsStatic(); // Call this when linking to MFC statically

#endif

这两个函数的调用是旧的MFC版本对新版本的操作系统特性的支持,在新的(那个时候是新的)Windows 95平台上要这样调用一下才能使用新的Windows 3D样式的控件,否则就是老的Win 3.2样子的控件。想当初喜欢OWL就是因为感觉它的控件比较“酷”,比如那个带底纹的对话框,菱形的checkbox,还有带图标的“OK”按钮,看到MFC作出来的灰灰的界面就觉得土,不过后来就知道MFC做界面也是很漂亮的,比如我做的。。。。,再打住。对于新的MFC版本来说已经不需要再调用这两个函数了,参考前面的方法,用_MSC_VER对其隔离就行了:

#if _MSC_VER <= 1200 // MFC 6.0 or earlier

#ifdef _AFXDLL

Enable3dControls(); // Call this when using MFC in a shared DLL

#else

Enable3dControlsStatic(); // Call this when linking to MFC statically

#endif

#endif

五、.def文件引起的连接告警

对于普通的DLL项目中使用的.def文件通常会引起LNK4017链接告警,如下所示:

.\ComFunc.def(4) : warning LNK4017: DESCRIPTION statement not supported for the target platform; ignored

Creating library .\..\Debug/ComFunc.lib and object .\..\Debug/ComFunc.exp

一个典型的.def文件通常有以下内容:

LIBRARY "XorCryptor"

DESCRIPTION 'XorCryptor Windows Dynamic Link Library'

EXPORTS

; Explicit exports can go here

..................

消除这个连接告警的方法就是从.def文件中删除DESCRIPTION描述信息,不过这个告警也不是什么大问题,不删也可以。另一个可能产生的连接告警是LNK4222,通常出现在ocx 控件和com组件的项目中,一个典型输出是:

Linking...

.\PlusInModule.def : warning LNK4222: exported symbol 'DllCanUnloadNow' should not be assigned an ordinal

.\PlusInModule.def : warning LNK4222: exported symbol 'DllGetClassObject' should not be assigned an ordinal

.\PlusInModule.def : warning LNK4222: exported symbol 'DllRegisterServer' should not be assigned an ordinal

.\PlusInModule.def : warning LNK4222: exported symbol 'DllUnregisterServer' should not be assigned an ordinal

出现这个告警的原因是旧的项目的.def文件通常这样定义ocx和com必需的四个导出函数:EXPORTS

DllCanUnloadNow @1 PRIV A TE

DllGetClassObject @2 PRIV A TE

DllRegisterServer @3 PRIV A TE

DllUnregisterServer @4 PRIV A TE

其中为这四个重要的导出函数指定了四个顺序号。Windows平台上通常用两种方式定位DLL 文件中的导出函数,一种是根据导出函数名称,一种是根据顺序号,上学时曾经写过一个显示图片的程序,能处理大多数当时流行的图像格式文件,唯独jpeg格式的搞不定,有一次看到一个图像处理软件中包含了一个LoadJpeg.dll,很显然这个DLL是处理jpeg格式的图像文件的嘛,于是赶快用depends look了一下,顿时高喊:鬼啊~~~。原来这个depends 竟然查不到导出函数的名字,后来才知道还有NONAME参数强制用顺序号定位导出函数,于是就常常弄个没有导出函数名字的DLL到处show。。。。嗯,又扯远了。话说为什么旧的系统要以此指定这四个导出函数的顺序号我就没有研究了,反正现在不需要指定了,只要将

@1,@2之类的删除就行了,不过不删好像也没什么问题,它们会被自动忽略。

六、使用MFC的消息映射宏引起的编译错误

错误现象之一:

f:\project\.....\plusmaindlg.cpp(220) : error C2440: 'static_cast' : cannot convert from 'void (__thiscall CPlusMainDlg::* )(int,BOOL)' to 'LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)'

None of the functions with this name in scope match the target type

错误现象之二:

f:\project\.....\crpfileopavdlg.cpp(87) : error C2440: 'static_cast' : cannot convert from 'LRESULT (__thiscall CCrpFileOpavDlg::* )(LPCTSTR,int)' to 'LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)'

None of the functions with this name in scope match the target type

以上两个编译错误产生是因为新旧版本的MFC 中对ON_MESSAGE消息映射宏定义不同引起的,先看看老版本的MFC的ON_MESSAGE消息宏定义:

#define ON_MESSAGE(message, memberFxn) \

{ message, 0, 0, 0, AfxSig_lwl, \

(AFX_PMSG)(AFX_PMSGW)(LRESULT (AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM))&memberFxn },

再看看新版本的ON_MESSAGE定义:

#define ON_MESSAGE(message, memberFxn) \

{ message, 0, 0, 0, AfxSig_lwl, \

(AFX_PMSG)(AFX_PMSGW) \

(static_cast< LRESULT (AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM) > \

(memberFxn)) },

注意,函数类型没有变化,都是:

LRESULT (AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM);

类型的函数指针(CWnd以及派生类的类成员函数指针),区别之处是新的ON_MESSAGE 宏使用C++的static_cast 操作符代替了C类型的强制转换。产生这两个错误其实是因为用户没有按照ON_MESSAGE宏的约定声明和定义消息响应函数造成的,比如,对于某些不需要处理返回值的消息响应函数,用户通常这样声明和定义消息响应函数:

在头文件中声明:

afx_msg void OnFileProcess(WPARAM wParam,LPARAM lParam);

在源文件中实现:

void CCrpFileOpavDlg::OnFileProcess(WPARAM wParam, LPARAM lParam)

{

.......

}

或者更过分一些,直接指定为实际参数类型:

在头文件中声明:

afx_msg void OnFileProcess(LPCTSTR lpszMessage, int nPercent);

在源文件中实现:

void CCrpFileOpavDlg::OnFileProcess(LPCTSTR lpszMessage, int nPercent)

{

.......

}

旧版本的ON_MESSAGE使用了C类型的强制转换,宏解开后的代码后不会产生错误信息,但是改成对类型检查很严格的static_cast 操作符时就出问题了,因为通不过static_cast 操作符的检查。解决方法就是修改代码,同时吸取教训,普遍使用的方法并不一定就能约定俗成,一切还是要按照规矩来。

错误现象之三:

f:\project\.....\WzButton.cpp(74) : error C2440: 'static_cast' : cannot convert from 'UINT (__thiscall CWzButton::* )(CPoint)' to 'LRESULT (__thiscall CWnd::* )(CPoint)'

Cast from base to derived requires dynamic_cast or static_cast

出现这个错误的原因可是“人力不可抗拒”之原因造成的,因为旧版本的ON_WM_NCHITTEST 宏使用了

UINT (__thiscall CWzButton::* )(CPoint);

类型的类成员函数指针,其定义如下:

#define ON_WM_NCHITTEST() \

{ WM_NCHITTEST, 0, 0, 0, AfxSig_wp, \

(AFX_PMSG)(AFX_PMSGW)(UINT (AFX_MSG_CALL CWnd::*)(CPoint))&OnNcHitTest },

但是新版本变成了:

#define ON_WM_NCHITTEST() \

{ WM_NCHITTEST, 0, 0, 0, AfxSig_l_p, \

(AFX_PMSG)(AFX_PMSGW) \

(static_cast< LRESULT (AFX_MSG_CALL CWnd::*)(CPoint) > (&ThisClass :: OnNcHitTest)) },

注意返回值类型由UINT改成了LRESULT,再加上static_cast的严格检查,所以就出错了。修改的方法就是将你的OnNcHitTest函数由:

afx_msg UINT OnNcHitTest(CPoint point);

改成:

afx_msg LRESULT OnNcHitTest(CPoint point);

不必太在意,这个不是你的错,不过,如果你要维护一个老的界面库(通常很多控件的subclass 都会用到ON_WM_NCHITTEST),改起来还是很痛苦地,不扯了,继续下一个。

七、statreg.cpp 和atlimpl.cpp 的废弃(obsolete)问题

在编译老的A TL向导生成的代码时,会遇到下面的编译输出:

StdAfx.cpp

statreg.cpp is obsolete. Please remove it from your project.

atlimpl.cpp is obsolete. Please remove it from your project.

因为老的A TL向导生成的代码通常在stdafx.cpp文件中添加以下代码:

#ifdef _A TL_STA TIC_REGISTRY

#include

#include

#endif

#include

根据提示删除#include 和#include 两行代码就行了,不过更好的办法是这样改:

#ifdef _A TL_STA TIC_REGISTRY

#include

#if _MSC_VER <= 1200 // MFC 6.0 or earlier

#include

#endif

#endif

#if _MSC_VER <= 1200 // MFC 6.0 or earlier

#include

#endif

八、新的C++编译器不再支持默认类型的变量定义

错误现象是:

f:\project\.....\WzCheckBox.cpp(464) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

产生这个错误的原因是程序中出现了这样的代码:

const some_const_var = 10;

static some_static_bool = FALSE;

新的C++编译器严格按照C++标准,不再支持默认类型的变量定义方式,必须严格指定变量类型,如下使用:

const int some_const_var = 10;

static BOOL some_static_bool = FALSE;

九、for 语句的变量作用域问题

考察下面的代码:

for(int i = 0; i < 120; i++)

{

if(something_happen)

{

break;

}

.............

}

if(i < 120)

{

//something happen

}

在VC6的编译器中,这样的代码是没有问题的,因为VC6的编译器为了兼容旧的Microsoft C/C++编译器,没有严格按照C++标准执行,但是从VC7开始,VC的编译器开始遵守C++标准,所以就会出现“变量i没有定义的错误”。解决的方法也很简单,按照Jim Hyslop 和Herb Sutter的经典对话系列的第四篇中的方法,改成如下就可以了:

int i;

for(i = 0; i < 120; i++)

十、字符串函数的返回值问题

strchr(_tcschr)、strpbrk(_tcspbrk ??)、strrchr(_tcsrchr)和strstr(_tcsstr)这四个函数在VC6的CRT库中定义的返回值都是char *(TCHAR *),所以以前的代码通常是这样使用的:

TCHAR *cp = _tcschr( pszPath, _T('\\') );

//使用*cp,可以通过cp指针修改pszPath的内容

这其实是一个“漏洞”,因为如果pszPath是const char(TCHAR) *字符串,那么就表示它不希望修改字符串的内容,但是调用strchr(_tcschr)函数后就可以通过cp指针修改其内容了,这岂不荒谬?所有在新版本的CRT库中,这几个函数的返回值都改成const char *,这就会导致上面的代码产生编译错误。建议的修改方式是改成如下方式:

const TCHAR *cp = _tcschr( pszPath, _T('\\') );

//不能再通过cp指针修改pszPath的内容

但是这样修改可能对代码的影响比较大,比如下面的代码:

TCHAR buf[256]; //局部缓冲区

......

TCHAR *cp = _tcschr( buf, _T('\\') );

//作为局部缓冲区(非const),希望通过cp修改buf的内容

这种情况怎么办呢?对了,C++还有个const_cast操作符,这时就可以排上用场了:TCHAR *cp = const_char(_tcschr( buf, _T('\\') ));

不过上面的方法要慎用,除非确定buf是非const的,否则最好老老实实地修改代码。

十一、类成员函数指针做为函数参数的“C3867”错误

考察下面的代码,CWzWindowsHook类的构造函数使用一个该类的成员函数指针,这样构造对象时可以选择消息过滤的handler,可以是MouseMsgFilter,也可以是KeyboardMsgFilter:

typedef BOOL (CWzWindowsHook::*FILTERPROC)(WPARAM wParam, LPARAM lParam);

// A hook used in customization sheet to filter keyboard/mouse events

class CWzWindowsHook

{

private:

FILTERPROC m_pFilter;

BOOL MouseMsgFilter(WPARAM wParam, LPARAM lParam);

BOOL KeyboardMsgFilter(WPARAM wParam, LPARAM lParam);

public:

CWzWindowsHook(FILTERPROC pFilter) : m_pFilter(pFilter)

旧的遗留代码存在这样的用法:

CWzWindowsHook mouseHooker(CWzWindowsHook::MouseMsgFilter);

在VC6的编译器下编译可能没有问题,但是在VC9的编译器下编译会有如下报错:

f:\project\.....\WzWindowsHook.cpp(272) : error C3867: 'CWzWindowsHook::MouseMsgFilter': function call missing argument list; use '&CWzWindowsHook::MouseMsgFilter' to create a pointer to member

虽然C++从C继承来了函数名即是函数地址的语法规则,但是根据C++的标准,类成员函数的指针仍然需要一个取地址符“&”。解决方法很简单,按照提示改成如下代码即可:

CWzWindowsHook mouseHooker(&CWzWindowsHook::MouseMsgFilter);

十二、wchar_t *类型与USHORT *的转换错误

VC6的编译器不支持wchar_t数据类型,wchar_t实际上被定义成unsigned short,VC9的编译器已经支持wchar_t为内置数据类型,但是由一个编译选项控制,这个选项默认是打开的,也就是将wchar_t作为编译器的内置数据类型。但是OLECHAR和WCHAR的定义仍然是unsigned short,在VC6的编译环境中,两者的指针都是USHORT *,相互赋值和做为函数参数传递没有问题,但是如果wchar_t作为编译器的内置数据类型,那就意味着wchar_t *与OLECHAR *或WCHAR *是两种不同类型的指针,相互赋值就会报编译错误,下面的信息就是一个典型的错误输出:

f:\project\.....\shellpidl.cpp(290) : error C2664: 'MultiByteToWideChar' : cannot convert parameter 5 from 'USHORT *' to 'LPWSTR'

Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

解决的方法就是使用C++的reinterpret_cast操作符或使用C-style强制转换,当然也可以在项目属性设置中关闭前面提到的那个选项(这个偶美试过,不知道会不会有其它问题)。

[实用参考]VBA常用代码大全.doc

前言 我们平时在工作表单元格的公式中常常使用函数,EGcel自带的常用的函数多达300多个,功能强大,丰富多彩,但是在VBA中不能直接应用,必须在函数名前面加上对象,比如:Application.WorksheetFunction.Sum(arg1,arg2,arg3)。 而能在VBA中直接应用的函数也有几十个,下面将逐一详细介绍常用的40个VBA函数,以供大家学习参考。 第1.1例ASC函数 一、题目: 要求编写一段代码,运行后得到字符串”EGcel”的首字母和”e”的ASCII值。二、代码: Sub示例_1_01() DimmyNum1%,myNum2% myNum1=Asc("EGcel")'返回69 myNum2=Asc("e")'返回101 [a1]="myNum1=":[b1]=myNum1 [a2]="myNum2=":[b2]=myNum2 EndSub 三、代码详解 1、Sub示例_1_01():宏程序的开始语句。 2、DimmyNum1%,myNum2%:变量myNum1和myNum2声明为整型变量。 也可以写为DimmyNum1AsInteger。Integer变量存储为16位(2个字节)的数值形式,其范围为-32,768到32,767之间。Integer的类型声明字符是百分比符号(%)。 3、myNum1=Asc("EGcel"):把Asc函数的值赋给变量myNum1。

Asc函数返回一个Integer,代表字符串中首字母的字符的ASCII代码。 语法 Asc(string) 必要的string(字符串)参数可以是任何有效的字符串表达式。如果string中没有包含任何字符,则会产生运行时错误。 4、myNum2=Asc("e"):把Asc函数的值赋给变量myNum2。这里返回小写字母e的ASCII代码101。 5、[a1]="myNum1=":[b1]=myNum1:把字符串“myNum1=“赋给A1单元格,把变量myNum1的值赋给B1单元格。 6、[a2]="myNum2=":[b2]=myNum2:把字符串“myNum2=“赋给A2单元格,把变量myNum2的值赋给B2单元格。 7、EndSub:程序的结束语句,和“Sub示例_1_01()”相对应。 第1.2例Chr函数 一、题目"": 要求编写一段代码,运用Chr函数将ASCII值转换为对应的字符。 二、代码: Sub示例_1_02() DimmyChar1$,myChar2$ myChar1=Chr(69)'返回E。 myChar2=Chr(101)'返回e。 [a1]="myChar1=":[b1]=myChar1 [a2]="myChar2=":[b2]=myChar2 EndSub 三、代码详解

MATLAB特征提取代码讲课稿

f=strcat('D:\bishe\',num2str(i)); image=strcat(f,'.jpg'); PS=imread(image); PS=imresize(PS,[300,300],'bilinear');%归一化大小 PS=rgb2gray(PS); [m,n]=size(PS); %测量图像尺寸参数 GP=zeros(1,256); %预创建存放灰度出现概率的向量 for k=0:255 GP(k+1)=length(find(PS==k))/(m*n); %计算每级灰度出现的概率,将其存入GP 中相应位置 end %直方图均衡化 S1=zeros(1,256); for i=1:256 for j=1:i S1(i)=GP(j)+S1(i); %计算Sk end end S2=round((S1*256)+0.5); %将Sk归到相近级的灰度 %图像均衡化 f=PS; for i=0:255 f(find(PS==i))=S2(i+1); %将各个像素归一化后的灰度值赋给这个像素 end figure,imshow(f); %边缘检测 f=edge(f,'canny',0.25); imshow(f); %二值法锐化图像 f=double(f); [x,y]=gradient(f); g=sqrt(x.*x+y.*y); i=find(g>=0.5); g(i)=256; j=find(g<0.5); g(j)=0; imshow(g); title('二值法锐化图像'); %中值滤波 g=medfilt2(g); g=dither(g);

地理各模块知识点总结

地理各模块知识点总结 地理知识点总结了一篇又一篇,每次都是以不一样的视角去告诉学生,如果考试是这样考的,这样的知识点就必须要记住,今天也不例外,每块知识都是从不同角度来分析,这一定就是我们需要掌握的知识! 一、生态问题 1 水土流失问题 我国典型地区:黄土高原、南方低山丘陵地区 产生的原因: (1)自然原因:季风气候降水集中,多暴雨;地表植被稀少;黄土土质疏松黄土高原)。 (2)人为原因:植被的破坏;不合理的耕作制度;开矿。 治理的措施:压缩农业用地,扩大林、草种植面积;植树造林;小流域综合治理。 治理的意义: 有利于因地制宜地进行产业结构的调整,使农林牧副渔全面发展,可以增加农民收入,促进当地经济发展,改善农民生活条件,提高生活质量;有利于改善当地的生态环境,建立良性生态系统;建立生态农业模式,有利于促进生态和经济可持续发展。 2 荒漠化问题 我国典型的地区:西北地区(新疆、青海、内蒙等地) 产生的原因: (1)自然原因:全球变暖,蒸发旺盛;处于内陆地区,降水少;鼠害;蝗害。 (2)人为原因:过度放牧;过度樵采;过度开垦;水资源的不合理利用;交通线等工程建设保护不当。 治理措施: 制定草场保护的法律、法规,加强管理;控制载畜量;营造“三北防护林”建设;退耕还林、还牧;建设人工草场;推广轮牧;禁止采伐发菜等 治理意义: 有利于因地制宜地进行产业结构的调整,使农林牧副渔全面发展,可以增加农民收入,促进当地经济发展,改善农民生活条件,提高生活质量;有利于保护土地资源改善当地的生态环境;有利于促进生态和经济可持续发展。 3 干旱缺水问题 我国典型地区:华北地区、西北、长江中下游地区 华北地区:

图像颜色特征提取原理

一、颜色特征 1 颜色空间 1.1 RGB 颜色空间 是一种根据人眼对不同波长的红、绿、蓝光做出锥状体细胞的敏感度描述的基础彩色模式,R、 G、B 分别为图像红、绿、蓝的亮度值,大小限定在 0~1 或者在 0~255。 1.2 HIS 颜色空间 是指颜色的色调、亮度和饱和度,H表示色调,描述颜色的属性,如黄、红、绿,用角度 0~360度来表示;S 是饱和度,即纯色程度的量度,反映彩色的浓淡,如深红、浅红,大小限定在 0~1;I 是亮度,反映可见光对人眼刺激的程度,它表征彩色各波长的总能量,大小限定在 0~1。 1.3 HSV 颜色模型 HSV 颜色模型依据人类对于色泽、明暗和色调的直观感觉来定义颜色, 其中H (Hue)代表色度, S (Saturat i on)代表色饱和度,V (V alue)代表亮度, 该颜色系统比RGB 系统更接近于人们的经验和对彩色的感知, 因而被广泛应用于计算机视觉领域。 已知RGB 颜色模型, 令M A X = max {R , G, B },M IN =m in{R , G,B }, 分别为RGB 颜色模型中R、 G、 B 三分量的最大和最小值, RGB 颜色模型到HSV 颜色模型的转换公式为: S =(M A X - M IN)/M A X H = 60*(G- B)/(M A X - M IN) R = M A X 120+ 60*(B – R)/(M A X - M IN) G= M A X 240+ 60*(R – G)/(M A X - M IN) B = M A X V = M A X 2 颜色特征提取算法 2.1 一般直方图法 颜色直方图是最基本的颜色特征表示方法,它反映的是图像中颜色的组成分布,即出现了哪些颜色以及各种颜色出现的概率。其函数表达式如下: H(k)= n k/N (k=0,1,…,L-1) (1) 其中,k 代表图像的特征取值,L 是特征可取值的个数,n k是图像中具有特征值为 k 的象素的个数,N 是图像象素的总数。由上式可见,颜色直方图所描述的是不同色彩在整幅图像中所占的比例,无法描述图像中的对象或物体,但是由于直方图相对于图像以观察轴为轴心的旋转以及幅度不大的平移和缩放等几何变换是不敏感的,而且对于图像质量的变化也不甚敏感,所以它特别适合描述那些难以进行自动分割的图像和不需要考虑物体空间位置的图像。 由于计算机本身固有的量化缺陷,这种直方图法忽略了颜色的相似性,人们对这种算法进行改进,产生了全局累加直方图法和局部累加直方图法。 2.2 全局累加直方图法 全局累加直方图是以颜色值作为横坐标,纵坐标为颜色累加出现的频数,因此图像的累加直方空间 H 定义为:

MATLAB特征提取代码

MATLAB特征提取代码 for i=1:26 f=strcat('D:\bishe\',num2str(i)); image=strcat(f,'.jpg'); PS=imread(image); PS=imresize(PS,[300,300],'bilinear');%归一化大小 PS=rgb2gray(PS); [m,n]=size(PS); %测量图像尺寸参数 GP=zeros(1,256); %预创建存放灰度出现概率的向量 for k=0:255 GP(k+1)=length(find(PS==k))/(m*n); %计算每级灰度出现的概率,将其存入GP中相应位置 end %直方图均衡化 S1=zeros(1,256); for i=1:256 for j=1:i S1(i)=GP(j)+S1(i); %计算Sk end end S2=round((S1*256)+0.5); %将Sk归到相近级的灰度 %图像均衡化 f=PS; for i=0:255 f(find(PS==i))=S2(i+1); %将各个像素归一化后的灰度值赋给这个像素 end figure,imshow(f); %边缘检测 f=edge(f,'canny',0.25); imshow(f); %二值法锐化图像 f=double(f); [x,y]=gradient(f); g=sqrt(x.*x+y.*y); i=find(g>=0.5); g(i)=256; j=find(g<0.5); g(j)=0; imshow(g); title('二值法锐化图像'); %中值滤波 g=medfilt2(g); g=dither(g); imshow(g);

最新外研版(新)八年级上册英语各模块知识点归纳总结

英语初二上册重点知识点讲解 Module 1 How to learn English 1.pair n. (相关的)两个人,一对,一双,一副 a pair of socks一双袜子 a pair of gloves一副手套two pairs of trousers两条裤子 e.g.A pair of teenage boys are watching a football game.两个青少年正在看足球赛。 2.correct (1)v. 改正,纠正 e.g.The teacher returned to her room to correct exercise books.老师回到房间去改练习本。 Correct the spelling.纠正拼写。 (2)adj.正确的;恰当的 e.g.correct pronunciation 正确发音 Do you have the correct time?你的表走得准吗? 3.advice (1)n.意思是“意见,建议”,为不可数名词,可用some,much,a piece of,pieces of等修饰,不能说an advice或many/a few advices。 (2)表示“有关……的建议”时,用介词on,接名词、代词或由疑问词引导的不定式。 advice on what to do next. 我们去征求一下他的意见下一步该怎么办。 e.g.Let’s ask for his 常见搭配: take/follow one’s advice接受某人的建议 ask for advice 征求意见 接受(拒绝)某人的建议 accept/refuse one’s advice offer advice to sb. 向某人提供建议 拓展: advise vt.建议 常见搭配:advise sb. to do sth.

图像特征提取总结

图像常见特征提取方法简介 常用的图像特征有颜色特征、纹理特征、形状特征、空间关系特征。 一、颜色特征 (一)特点:颜色特征是一种全局特征,描述了图像或图像区域所对应的景物的表面性质。一般颜色特征是基于像素点的特征,此时所有属于图像或图像区域的像素都有各自的贡献。由于颜色对图像或图像区域的方向、大小等变化不敏感,所以颜色特征不能很好地捕捉图像中对象的局部特征。另外,仅使用颜色特征查询时,如果数据库很大,常会将许多不需要的图像也检索出来。颜色直方图是最常用的表达颜色特征的方法,其优点是不受图像旋转和平移变化的影响,进一步借助归一化还可不受图像尺度变化的影响,基缺点是没有表达出颜色空间分布的信息。 (二)常用的特征提取与匹配方法 (1)颜色直方图 其优点在于:它能简单描述一幅图像中颜色的全局分布,即不同色彩在整幅图像中所占的比例,特别适用于描述那些难以自动分割的图像和不需要考虑物体空间位置的图像。其缺点在于:它无法描述图像中颜色的局部分布及每种色彩所处的空间位置,即无法描述图像中的某一具体的对象或物体。 最常用的颜色空间:RGB颜色空间、HSV颜色空间。 颜色直方图特征匹配方法:直方图相交法、距离法、中心距法、参考颜色表法、累加颜色直方图法。 (2)颜色集 颜色直方图法是一种全局颜色特征提取与匹配方法,无法区分局部颜色信息。颜色集是对颜色直方图的一种近似首先将图像从RGB颜色空间转化成视觉均衡的颜色空间(如HSV 空间),并将颜色空间量化成若干个柄。然后,用色彩自动分割技术将图像分为若干区域,每个区域用量化颜色空间的某个颜色分量来索引,从而将图像表达为一个二进制的颜色索引集。在图像匹配中,比较不同图像颜色集之间的距离和色彩区域的空间关系 (3)颜色矩 这种方法的数学基础在于:图像中任何的颜色分布均可以用它的矩来表示。此外,由于颜色分布信息主要集中在低阶矩中,因此,仅采用颜色的一阶矩(mean)、二阶矩(variance)和三阶矩(skewness)就足以表达图像的颜色分布。 (4)颜色聚合向量 其核心思想是:将属于直方图每一个柄的像素分成两部分,如果该柄内的某些像素所占据的连续区域的面积大于给定的阈值,则该区域内的像素作为聚合像素,否则作为非聚合像素。(5)颜色相关图 二纹理特征 (一)特点:纹理特征也是一种全局特征,它也描述了图像或图像区域所对应景物的表面性质。但由于纹理只是一种物体表面的特性,并不能完全反映出物体的本质属性,所以仅仅利用纹理特征是无法获得高层次图像内容的。与颜色特征不同,纹理特征不是基于像素点的特征,它需要在包含多个像素点的区域中进行统计计算。在模式匹配中,这种区域性的特征具有较大的优越性,不会由于局部的偏差而无法匹配成功。作为一种统计特征,纹理特征常具有旋转不变性,并且对于噪声有较强的抵抗能力。但是,纹理特征也有其缺点,一个很明显的缺点是当图像的分辨率变化的时候,所计算出来的纹理可能会有较大偏差。另外,由于有可能受到光照、反射情况的影响,从2-D图像中反映出来的纹理不一定是3-D物体表面真实

MATLAB特征提取代码

for i=1:26 f=strcat('D:\bishe\',num2str(i)); image=strcat(f,'.jpg'); PS=imread(image); PS=imresize(PS,[300,300],'bilinear');%归一化大小 PS=rgb2gray(PS); [m,n]=size(PS); %测量图像尺寸参数 GP=zeros(1,256); %预创建存放灰度出现概率的向量 for k=0:255 GP(k+1)=length(find(PS==k))/(m*n); %计算每级灰度出现的概率,将其存入GP中相应位置 end %直方图均衡化 S1=zeros(1,256); for i=1:256 for j=1:i S1(i)=GP(j)+S1(i); %计算Sk end end S2=round((S1*256)+0.5); %将Sk归到相近级的灰度 %图像均衡化 f=PS; for i=0:255 f(find(PS==i))=S2(i+1); %将各个像素归一化后的灰度值赋给这个像素 end figure,imshow(f); %边缘检测 f=edge(f,'canny',0.25); imshow(f); %二值法锐化图像 f=double(f); [x,y]=gradient(f); g=sqrt(x.*x+y.*y); i=find(g>=0.5); g(i)=256; j=find(g<0.5); g(j)=0; imshow(g); title('二值法锐化图像'); %中值滤波 g=medfilt2(g); g=dither(g); imshow(g); %提取面积,矩形度,圆形度,拉伸度特征

人教版八年级上册数学各单元知识点归纳总结

第十一章三角形 一、知识框架: 二、知识概念: 1.三角形:由不在同一直线上的三条线段首尾顺次相接所组成的图形叫做三角形. 2.三边关系:三角形任意两边的和大于第三边,任意两边的差小于第三边. 3.高:从三角形的一个顶点向它的对边所在直线作垂线,顶点和垂足间的线段叫做三角形 的高. 4.中线:在三角形中,连接一个顶点和它对边中点的线段叫做三角形的中线. 5.角平分线:三角形的一个内角的平分线与这个角的对边相交,这个角的顶点和交点之间 的线段叫做三角形的角平分线. 6.三角形的稳定性:三角形的形状是固定的,三角形的这个性质叫三角形的稳定性. 7.多边形:在平面内,由一些线段首尾顺次相接组成的图形叫做多边形. 8.多边形的内角:多边形相邻两边组成的角叫做它的内角. 9.多边形的外角:多边形的一边与它的邻边的延长线组成的角叫做多边形的外角. 10.多边形的对角线:连接多边形不相邻的两个顶点的线段,叫做多边形的对 角线. 11.正多边形:在平面内,各个角都相等,各条边都相等的多边形叫正多边形. 12.平面镶嵌:用一些不重叠摆放的多边形把平面的一部分完全覆盖,叫做用 多边形覆盖平面, 13.公式与性质: ⑴三角形的内角和:三角形的内角和为180° ⑵三角形外角的性质: 性质1:三角形的一个外角等于和它不相邻的两个内角的和. 性质2:三角形的一个外角大于任何一个和它不相邻的内角. n-·180° ⑶多边形内角和公式:n边形的内角和等于(2) ⑷多边形的外角和:多边形的外角和为360°. n-条对角 ⑸多边形对角线的条数:①从n边形的一个顶点出发可以引(3)

线,把多边形分成(2)n -个三角形.②n 边形共有(3)2 n n -条对角线. 第十二章 全等三角形 一、知识框架: 二、知识概念: 1.基本定义: ⑴全等形:能够完全重合的两个图形叫做全等形. ⑵全等三角形:能够完全重合的两个三角形叫做全等三角形. ⑶对应顶点:全等三角形中互相重合的顶点叫做对应顶点. ⑷对应边:全等三角形中互相重合的边叫做对应边. ⑸对应角:全等三角形中互相重合的角叫做对应角. 2.基本性质: ⑴三角形的稳定性:三角形三边的长度确定了,这个三角形的形状、大小就全确定,这个性质叫做三角形的稳定性. ⑵全等三角形的性质:全等三角形的对应边相等,对应角相等. 3.全等三角形的判定定理: ⑴边边边(SSS ):三边对应相等的两个三角形全等. ⑵边角边(SAS ):两边和它们的夹角对应相等的两个三角形全等. ⑶角边角(ASA ):两角和它们的夹边对应相等的两个三角形全等. ⑷角角边(AAS ):两角和其中一个角的对边对应相等的两个三角形全等. ⑸斜边、直角边(HL ):斜边和一条直角边对应相等的两个直角三角形 全等. 4.角平分线: ⑴画法: ⑵性质定理:角平分线上的点到角的两边的距离相等. ⑶性质定理的逆定理:角的内部到角的两边距离相等的点在角的平分线上. 5.证明的基本方法: ⑴明确命题中的已知和求证.(包括隐含条件,如公共边、公共角、对顶 角、角平分线、中线、高、等腰三角形等所隐含的边角关系)

图像特征提取综述

图像特征提取的定位是计算机视觉和图像处理里的一个概念,表征图像的特性。输入是一张图像(二维的数据矩阵),输出是一个值、一个向量、一个分布、一个函数或者是信号。提取特征的方法千差万别,下面是图像特征的一些特性: 边缘 边缘是两个区域边界的像素集合,本质上是图像像素的子集,能将区域分开。边缘形状是任意的,实践中定义为大的梯度的像素点的集合,同时为了平滑,还需要一些算法进行处理。角 顾名思义,有个突然较大的弧度。早起算法是在边缘检测的基础上,分析边缘的走向,如果突然转向则被认为是角。后来的算法不再需要边缘检测,直接计算图像梯度的高度曲率(合情合理)。但会出现没有角的地方也检测到角的存在。 区域 区域性的结构,很多区域检测用来检测角。区域检测可以看作是图像缩小后的角检测。 脊 长形的物体,例如道路、血管。脊可以看成是代表对称轴的一维曲线,每个脊像素都有脊宽度,从灰梯度图像中提取要比边缘、角和区域都难。 特征提取 检测到特征后提取出来,表示成特征描述或者特征向量。 常用的图像特征:颜色特征、 纹理特征 形状特征 空间关系特征。 1.颜色特征 1.1特点:颜色特征是全局特征,对区域的方向、大小不敏感,但是不能很好捕捉局部特征。 优点:不受旋转和平移变化的影响,如果归一化不受尺度变化的影响。 缺点:不能表达颜色空间分布的信息。 1.2特征提取与匹配方法 (1)颜色直方图 适用于难以自动分割的图像,最常用的颜色空间:RGB和HSV。 匹配方法:直方图相交法(相交即交集)、距离法、中心距法、参考颜色表法、累加颜色直方图法。 对颜色特征的表达方式有许多种,我们采用直方图进行特征描述。常见的直方图有两种:统计直方图,累积直方图。我们将分别实验两种直方图在图像聚类和检索中的性能。 统计直方图 为利用图像的特征描述图像,可借助特征的统计直方图。图像特征的统计直方图实际是一个1-D的离散函数,即: 上式中k代表图像的特征取值,L是特征可取值个数,是图像中具有特征值为k的像素的个数,N是图像像素的总数,一个示例如下图:其中有8个直方条,对应图像中的8种灰度像素在总像素中的比例。

js常用总结

JavaScript的内部对象: (1) Object (2) String (3) Math (4) Date (5) toString JavaScript 代码放在另一个单独的文件里,然后在网页(HTML文件)中使用“SRC= 此单独文件的路径/地址(URL)”来使用此单独文件里的JavaScript 程序代码。一般将这个单独的文件保存为扩展名为.JS 的文件: JS - 常用語句 1.document.write(""); 输出语句 2.JS中的注释为// 3.传统的HTML文档顺序是: document->html->(head,body) 4.一个浏览器窗口中的DOM顺序是: window->(navigator,screen,history,location,document) 5.得到表单中元素的名称和值: document.getElementById("表单中元素的ID号").name(或value) 6.一个小写转大写的JS: document.getElementById("output").value=document.getElementById("input").value.toUpperCa se(); 7.JS中的值类型: String,Number,Boolean,Null,Object,Function 8.JS中的字符型转换成数值型: parseInt(),parseFloat() 9.JS中的数字转换成字符型: ("" 变量) 10.JS中的取字符串长度是: (length) 11.JS中的字符与字符相连接使用号. 12.JS中的比较操作符有: == 等于,!=不等于,>,>=,<.<= 13.JS中声明变量使用: var 来进行声明 14.JS中的判断语句结构: if(condition){}else{} 15.JS中的循环结构: for([initial expression];[condition];[upadte expression]) {inside loop} 16.循环中止的命令是: break 17.JS中的函数定义:

图像特征提取matlab程序

%直接帧间差分,计算阈值并进行二值化处理(效果不好) clc; clear; Im1 = double(imread('lena.TIF')); %读取背景图片 Im2 = double(imread('lena.TIF'); %读取当前图片 [X Y Z] = size(Im2); %当前图片的各维度值 DIma = zeros(X,Y); for i = 1:X for j = 1:Y DIma(i,j) =Im1(i,j) - Im2(i,j); %计算过帧间差分值 end end figure,imshow(uint8(DIma)) %显示差分图像 title('DIma') med = median(DIma); %计算二值化阈值:差值图像中值 mad = abs(mean(DIma) - med); %中值绝对差 T = mean(med + 3*1.4826*mad) %初始阈值 Th =5*T; %调整阈值 BW = DIma <= Th; %根据阈值对图像进行二值化处理 figure,imshow(BW) %se = strel('disk',2); %膨胀处理 %BW = imopen(BW,se); %figure,imshow(BW) %title('BW') [XX YY] = find(BW==0); %寻找有效像素点的最大边框 handle = rectangle('Position',[min(YY),min(XX) ,max(YY)-min(YY),max(XX)-min(XX)]); set(handle,'EdgeColor',[0 0 0]); hei = max(XX)-min(XX); %边框高度 mark = min(YY)+1; while mark < max(YY)-1 %从边框左边开始到右边物质循环,寻找各个人体边缘 left = 0;right = 0; for j = mark:max(YY)-1 ynum = 0; for i = min(XX)+1 : max(XX)-1 if BW(i,j) == 0; ynum = ynum + 1;

八年级上册英语外研版各模块知识点归纳总结

八年级上册英语外研版各模块知识点归纳总结

Module 1 How to learn English advice take/follow one’s advice接受某人的建议ask for advice 征求意见accept/refuse one’s advice接受(拒绝)某人的建议 offer advice to sb. 向某人提供建议 try to (1)try to do sth .努力做某事try doing sth.试着做某事 try/do one’s best to do sth. 尽某人的全力做某事 5.as…as possible/one can time at a time一次,每一次at one time曾经,一度 at times /from time to time 有时,偶尔on time 准时 all the time 总是,一直in time及时,迟早 ①It’s time for sb. to do sth./It’s (high) time sb. did sth. Suggest

(2)形容词比较级用法 ①表示两者进行比较时用形容词比较级,最明显的提示词是than,其结构为“A…+比较级+than+B”。 ②有表示程度的副词a little,a bit,a few,a lot,much,even,still,far,rather,any等修饰时,用形容词比较级。 ③比较级前面可以加上表示具体数量差别的结构,表示具体“大多少”,“小多少”,“长多少”,“短多少”等。 ④表示“两者之间最……一个(of the two)”时,常用“the+比较级”结构。 ⑤表示“越来越……”,用比较级重叠结构,即“比较级+and+比较级”,多音节词和部分双音节词时用“more and more+形容词原级”。 ⑥表示“越……就越……”时,用“the+比较级,the+比较级”结构。 Module 4 Planes, ships and trains 形容词最高比较级用法 ①表示三者或三者以上的人或物进行比较时,用最高级形式。形容词最高级前必须加定冠词the,句末常跟一个in/of短语来表示范围。(of表示同范围,in 表示不同范围)

小波矩特征提取代码

小波矩特征提取matlab代码 分类:Image Recognition Matlab 2010-12-10 10:00 122人阅读评论(0) 收藏举报这是我上研究生时写的小波矩特征提取代码: %新归一化方法小波矩特征提取---------------------------------------------------------- F=imread('a1.bmp'); F=im2bw(F); F=imresize(F,[128 128]); %求取最上点 for i=1:128 for j=1:128 if (F(i,j)==1) ytop=i; xtop=j; break; end end if(F(i,j)==1) break; end end %求取最下点 for i=1:128 for j=1:128 if (F(129-i,j)==1) ybottom=129-i; xbottom=j; break; end end if(F(129-i,j)==1) break; end end %求取最左点 for i=1:128 for j=1:128 if (F(j,i)==1) yleft=j; xleft=i;

break; end end if(F(j,i)==1) break; end end %求取最右点 for i=1:128 for j=1:128 if (F(j,129-i)==1) yright=j; xright=129-i; break; end end if(F(j,129-i)==1) break; end end %求取中心点 x0=(xright-xleft)/2+xleft; y0=(ybottom-ytop)/2+ytop; x0=round(x0); y0=round(y0); %图像平移 F=double(F); [M,N]=size(F); F1=zeros(M,N); M0=M/2; N0=N/2; for i=1:M for j=1:N if F(i,j)==1 F1(i+M0-y0,j+N0-x0)=1; end end end %figure,imshow(F1); %图像缩放 max=0; for i=1:128 for j=1:128 if(F(i,j)==1)

图像特征提取方法

图像特征提取方法 摘要 特征提取是计算机视觉和图像处理中的一个概念。它指的是使用计算机提取图像信息,决定每个图像的点是否属于一个图像特征。特征提取的结果是把图像上的点分为不同的子集,这些子集往往属于孤立的点、连续的曲线或者连续的区域。 至今为止特征没有万能和精确的图像特征定义。特征的精确定义往往由问题或者应用类型决定。特征是一个数字图像中“有趣”的部分,它是许多计算机图像分析算法的起点。因此一个算法是否成功往往由它使用和定义的特征决定。因此特征提取最重要的一个特性是“可重复性”:同一场景的不同图像所提取的特征应该是相同的。 特征提取是图象处理中的一个初级运算,也就是说它是对一个图像进行的第一个运算处理。它检查每个像素来确定该像素是否代表一个特征。假如它是一个更大的算法的一部分,那么这个算法一般只检查图像的特征区域。作为特征提取的一个前提运算,输入图像一般通过高斯模糊核在尺度空间中被平滑。此后通过局部导数运算来计算图像的一个或多个特征。 常用的图像特征有颜色特征、纹理特征、形状特征、空间关系特征。当光差图像时,常 常看到的是连续的纹理与灰度级相似的区域,他们相结合形成物体。但如果物体的尺寸很小 或者对比度不高,通常要采用较高的分辨率观察:如果物体的尺寸很大或对比度很强,只需 要降低分辨率。如果物体尺寸有大有小,或对比有强有弱的情况下同事存在,这时提取图像 的特征对进行图像研究有优势。 常用的特征提取方法有:Fourier变换法、窗口Fourier变换(Gabor)、小波变换法、最 小二乘法、边界方向直方图法、基于Tamura纹理特征的纹理特征提取等。

设计内容 课程设计的内容与要求(包括原始数据、技术参数、条件、设计要求等):一、课程设计的内容 本设计采用边界方向直方图法、基于PCA的图像数据特征提取、基于Tamura纹理特征的纹理特征提取、颜色直方图提取颜色特征等等四种方法设计。 (1)边界方向直方图法 由于单一特征不足以准确地描述图像特征,提出了一种结合颜色特征和边界方向特征的图像检索方法.针对传统颜色直方图中图像对所有像素具有相同重要性的问题进行了改进,提出了像素加权的改进颜色直方图方法;然后采用非分割图像的边界方向直方图方法提取图像的形状特征,该方法相对分割方法具有简单、有效等特点,并对图像的缩放、旋转以及视角具有不变性.为进一步提高图像检索的质量引入相关反馈机制,动态调整两幅图像相似度中颜色特征和方向特征的权值系数,并给出了相应的权值调整算法.实验结果表明,上述方法明显地优于其它方法.小波理论和几个其他课题相关。所有小波变换可以视为时域频域的形式,所以和调和分析相关。所有实际有用的离散小波变换使用包含有限脉冲响应滤波器的滤波器段(filterbank)。构成CWT的小波受海森堡的测不准原理制约,或者说,离散小波基可以在测不准原理的其他形式的上下文中考虑。 通过边缘检测,把图像分为边缘区域和非边缘区域,然后在边缘区域内进行边缘定位.根据局部区域内边缘的直线特性,求得小邻域内直线段的高精度位置;再根据边缘区域内边缘的全局直线特性,用线段的中点来拟合整个直线边缘,得到亚像素精度的图像边缘.在拟合的过程中,根据直线段转角的变化剔除了噪声点,提高了定位精度.并且,根据角度和距离区分出不同直线和它们的交点,给出了图像精确的矢量化结果 图像的边界是指其周围像素灰度有阶跃变化或屋顶变化的那些像素的集合,边界广泛的存在于物体和背 景之间、物体和物体之间,它是图像分割所依赖的重要特征.边界方向直方图具有尺度不变性,能够比较好的 描述图像的大体形状.边界直方图一般是通过边界算子提取边界,得到边界信息后,需要表征这些图像的边 界,对于每一个边界点,根据图像中该点的梯度方向计算出该边界点处法向量的方向角,将空间量化为M级, 计算每个边界点处法向量的方向角落在M级中的频率,这样便得到了边界方向直方图. 图像中像素的梯度向量可以表示为[ ( ,),),( ,),)] ,其中Gx( ,),),G ( ,),)可以用下面的

Excel VBA常用代码总结1

Excel VBA常用代码总结1 改变背景色 Range("A1"). = xlNone ColorIndex一览 改变文字颜色 Range("A1"). = 1 获取单元格 Cells(1, 2) Range("H7") 获取范围 Range(Cells(2, 3), Cells(4, 5)) Range("a1:c3") '用快捷记号引用单元格 Worksheets("Sheet1").[A1:B5] 选中某sheet Set NewSheet = Sheets("sheet1") 选中或激活某单元格 '“Range”对象的的Select方法可以选择一个或多个单元格,而Activate方法可以指定某一个单元格为活动单元格。 '下面的代码首先选择A1:E10区域,同时激活D4单元格: Range("a1:e10").Select

Range("d4:e5").Activate '而对于下面的代码: Range("a1:e10").Select Range("f11:g15").Activate '由于区域A1:E10和F11:G15没有公共区域,将最终选择F11:G15,并激活F11单元格。 获得文档的路径和文件名 '路径 '名称 '路径+名称 '或将ActiveWorkbook换成thisworkbook 隐藏文档 = False 禁止屏幕更新 = False 禁止显示提示和警告消息 = False 文件夹做成 strPath = "C:\temp\" MkDir strPath 状态栏文字表示 = "计算中" 双击单元格内容变换 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If>= 5And<= 8) Then If= "●"Then = "" Else = "●" End If Cancel = True End If End Sub 文件夹选择框方法1 Set objShell = CreateObject("") Set objFolder = (0, "文件", 0, 0) If Not objFolder Is Nothing Then path= & "\" end if

人教版九年级英语各单元知识点总结

九年级英语全册各单元知识点总结 Unit 1 How can we become good learners? 一、短语: 1.have conversation with sb. 同某人谈话 2.connect …with… 把…和…连接/联系起来 3.the secret to… ……的秘诀 4.be afraid of doing sth./to do sth. 害怕做某事 5.look up 查阅 6.repeat out loud 大声跟读 7.make mistakes in 在……方面犯错误8.get bored 感到厌烦 9.be stressed out 焦虑不安的10.pay attention to 注意;关注 11.depend on 取决于;依靠12.the ability to do sth. 做某事的能力 二、知识点: 1. by + doing:通过……方式(by是介词,后面要跟动名词,也就是动词的ing形式); 2. a lot:许多,常用于句末; 3. aloud, loud与loudly的用法,三个词都与“大声”或“响亮”有关。 ①aloud是副词,通常放在动词之后。 ①loud可作形容词或副词。用作副词时,常与speak, talk, laugh等动词连用,多用于比较级, 须放在动词之后。 ①loudly是副词,与loud同义,有时两者可替换使用,可位于动词之前或之后。 4. not …at all:一点也不,根本不,not经常可以和助动词结合在一起,at all 则放在句尾; 5. be / get excited about sth.:对…感到兴奋; 6. end up doing sth:终止/结束做某事;end up with sth.:以…结束; 7. first of all:首先(这个短语可用在作文中,使得文章有层次); 8. make mistakes:犯错make a mistake 犯一个错误; 9. laugh at sb.:笑话;取笑(某人)(常见短语) 10. take notes:做笔记/记录; 11. native speaker 说本国语的人; 12. make up:组成、构成; 13. deal with:处理、应付; 14. perhaps = maybe:也许; 15. go by:(时间)过去; 16.each other:彼此; 17.regard… as … :把…看作为…; 18.change… into…:将…变为…; 19. with the help of sb. = with one's help 在某人的帮助下(注意介词of和with,容易出题) 20. compare … to …:把…比作… compare with 拿…和…作比较; 21. instead:代替,用在句末,副词; instead of sth / doing sth:代替,而不是(这个地方考的较多的就是instead of doing sth,也就是说如果of后面跟动词时,要用动名词形式,也就是动词的ing形式) 22.Shall we/ I + do sth.? 我们/我…好吗? 23. too…to:太…而不能,常用的句型是too+形容词/副词+ to do sth.

特征提取与匹配案例代码

特征提取与匹配案例代码、 环境:Android studio + opencv for Android MainActivity.java package com.packtpub.masteringopencvandroid.chapter3; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import https://www.wendangku.net/doc/3c4017178.html,.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import org.opencv.android.BaseLoaderCallback; import org.opencv.android.LoaderCallbackInterface; import org.opencv.android.OpenCVLoader; import org.opencv.android.Utils; import org.opencv.core.Core; import org.opencv.core.CvType; import org.opencv.core.Mat; import org.opencv.core.MatOfDMatch; import org.opencv.core.MatOfKeyPoint; import org.opencv.core.Point; import org.opencv.core.Scalar; import org.opencv.features2d.DMatch; import org.opencv.features2d.DescriptorExtractor; import org.opencv.features2d.DescriptorMatcher; import org.opencv.features2d.FeatureDetector; import org.opencv.features2d.Features2d; import org.opencv.highgui.Highgui; import org.opencv.imgproc.Imgproc;

相关文档