5.3 移动操作
本节介绍三种移动PTZ单元操作,绝对、相对或移动。所有操作都需要profile token,引用PTZ配置中的Media Profile。
所有移动命令应以非阻塞方式执行,表示不应等到请求的移动操作完成。新的移动请求可以覆盖最后的移动操作。
由于本规范涉及的物理设备范围广泛,因此本规范不要求对PTZ移动操作的特定相应时间。但是设备应尽量减少PTZ移动命令响应的延迟。设备没有完全控制PTZ控制输入和设备移动的滞后。网络与客户端的延迟会增加滞后。实现应该尽快减少设备的延迟。
5.3.1. 绝对移动(AbsoluteMove)
如果PTZ节点支持绝对水平/俯仰或绝对变焦的移动,则应支持绝对移动操作。这个命令的位置参数指定PTZ单元要移动的绝对位置。它分为一个可选的水平/俯仰元素和一个可选的变焦元素。如果忽略了水平/俯仰位置,则当前的水平/俯仰运动不受此命令的影响。变焦也是同样的原理。
PTZ节点支持的绝对位置空间,如果省略了空间信息,则PTZ配置的相应的默认空间,采用指定控件的媒体属性。设备仅为有绝对位置空间提供支持绝对水平/俯仰或变焦的服务。现有的移动操作命令中的速度参数比PTZ配置中的默认速度优先级要高。如果空间引用了速度参数,那么需要支持PTZ节点支持的速度空间。
如果无法达到所要求的绝对位置,操作将失败。
请求(REQUEST):
• ProfileToken [tt:ReferenceToken]
对现有媒体配置文件的引用
• Position [tt:PTZVector]
指定绝对目标位置的矢量
• Speed – 可选[tt:PTZSpeed]
可选速度矢量
响应(RESPONSE): 空消息
错误(FAULTS):
• env:Sender - ter:InvalidArgVal - ter:NoProfile
请求的配置文件token内ProfileToken不存在。
• env:Sender - ter:InvalidArgVal - ter:NoPTZProfile
请求的配置文件token未引用PTZ配置。
• env:Sender - ter:InvalidArgVal - ter:SpaceNotSupported
引用了PTZ节点不支持的空间。
• env:Sender - ter:InvalidArgVal - ter:InvalidPosition
请求的位置超出了界限。
• env:Sender - ter:InvalidArgVal - ter:InvalidSpeed
请求的速度超出了界限。
访问权限类(ACCESS CLASS):
ACTUATE
5.3.2. 相对移动(RelativeMove)
如果PTZ节点支持相对水平/俯仰或相对变焦移动,则需要支持相对移动(RelativeMove)操作。此操作的转换参数指定当前位置与要移动的位置的插值。该操作可分为一个可选的水平/俯仰元素和一个可选的变焦参数。如果水平/俯仰忽略掉了,那么当前的水平/俯仰位置不会受此命令的影响。变焦元素也同样。
转换元素中引用的空间应该为PTZ节点支持的转换空间。如果转换参数的空间信息忽略掉了,那么将根据PTZ配置的默认空间。设备需要支持相对水平/俯仰移动,相对变焦移动或不支持相对运动。
在请求移动的命令中携带的速度参数优先于PTZ配置中的默认速度。如果空间引用了速度参数,则PTZ节点需要支持速度空间。
通过发送水平/俯仰和变焦0值命令可以在当前位置停止PTZ单元。停止应具有与引用相对空间完全相同的效果。
如果请求转换后的绝对位置是无法到达的,那么PTZ节点需要移动最接近的有效位置。
请求(REQUEST):
• ProfileToken [tt:ReferenceToken]
对现有媒体配置文件的引用
• Translation [tt:PTZVector]
指定相对于当前位置的位置平移的向量
• Speed – 可选[tt:PTZSpeed]
可选速度矢量
响应(RESPONSE): 空消息
错误(FAULTS):
• env:Sender - ter:InvalidArgVal - ter:NoProfile
请求的配置文件token内ProfileToken不存在。
• env:Sender - ter:InvalidArgVal - ter:NoPTZProfile
请求的配置文件token未引用PTZ配置。
• env:Sender - ter:InvalidArgVal - ter:SpaceNotSupported
引用了PTZ节点不支持的空间。
• env:Sender - ter:InvalidArgVal - ter:InvalidTranslation
请求的转换超出了界限。
• env:Sender - ter:InvalidArgVal - ter:InvalidSpeed
请求的速度超出了界限。
访问权限类(ACCESS CLASS):
ACTUATE
5.3.3. 连续移动(ContinuousMove)
具有PTZ功能的设备应支持连续移动。此命令的速度参数为水平/俯仰和缩放指定的有符号的速度值。组合的水平/俯仰元素及变焦元素也是可选的。如果水平/俯仰元素忽略掉了,当前的水平/俯仰元素则不受此命令的影响。变焦元素也是如此。引用有速度元素的空间的PTZ节点需要支持速度空间。如果速度参数忽略掉了空间信息,那么采用相应的指定媒体文件的PTZ配置的默认空间。设备通过仅为支持的情况提供速度空间来支持连续水平/俯仰移动和连续变焦动作。
当前移动操作的超时参数优先于相应PTZ配置的默认超时参数。超时参数决定PTZ节点的连续移动的时间。
当0作为该轴的连续移动参数时,设备应停止在特定轴(水平,俯仰或变焦)的移动。引用的速度空间也应有独立的停止功能。这个命令在连续移动的影响与在5.3.5节中的停止命令是一样的。
请求的速度得到的绝对位置是不能到达的,则PTZ节点应移动到最接近的能到达的位置。连续移动操作的典型应用是通过操纵杆控制PTZ。
请求(REQUEST):
• ProfileToken [tt:ReferenceToken]
对现有媒体配置文件的引用
• Velocity [tt:PTZSpeed]
速度矢量指定水平,俯仰和变焦的速度。
• Timeout– 可选[tt:duration]
可选超时
响应(RESPONSE): 空消息
错误(FAULTS):
• env:Sender - ter:InvalidArgVal - ter:NoProfile
请求的配置文件token内ProfileToken不存在。
• env:Sender - ter:InvalidArgVal - ter:NoPTZProfile
请求的配置文件token未引用PTZ配置。
• env:Sender - ter:InvalidArgVal - ter:SpaceNotSupported
引用了PTZ节点不支持的空间。
• env:Sender - ter:InvalidArgVal - ter:InvalidTranslation
请求的转换超出了界限。
• env:Sender - ter:InvalidArgVal - ter:TimeoutNotSupported
指定的超时参数不在支持的超时时间范围内。
• env:Sender - ter:InvalidArgVal - ter:InvalidSpeed
请求的速度超出了界限。
访问权限类(ACCESS CLASS):
ACTUATE
5.3.4. 地理移动(GeoMove)
设备有GeoMove信号,则PTZ节点需要支持这类命令。
可选的AreaHeight和AreaWidth参数可以添加到参数中,所以PTZ设备可以决定变焦因子。如果没有提供AreaHeight和AreaWidth,该单元将不会更改变焦。AreaHeight和AreaWidth用米来表示。
请求的转换过程中的速度参数优先于相应的PTZ配置的默认速度。如果引用的空间含有速度参数,那么PTZ节点应支持速度空间。
如果PTZ设备不支持自动检索地理位置,那么在执行地理引用命令之前使用SetGeoLocation进行设置。客户端如果在设备设置地理位置之前发送GeoMove命令,设备应返回一个错误。
取决于PTZ设备的运动方式,请求的位置可能无法到达。这种情况下设备应返回一个错误,表示由于物理限制无法执行请求的操作。
请求(REQUEST):
• ProfileToken [tt:ReferenceToken]
对现有媒体配置文件的引用
• Target [tt:GeoLocation]
目标坐标。
• Speed – 可选[tt:PTZSpeed]
指定水平,俯仰和变焦的速度矢量。
• AreaWidth – 可选[xs:float]
要显示的可选区域。
• AreaHeight – 可选[xs:float]
要显示的可选区域。
响应(RESPONSE): 空消息
错误(FAULTS):
• env:Sender - ter:InvalidArgVal - ter:NoProfile
请求的配置文件token内ProfileToken不存在。
• env:Sender - ter:InvalidArgVal - ter:NoPTZProfile
请求的配置文件token未引用PTZ配置。
• env:Sender - ter:InvalidArgVal - ter:GeoMoveNotSupported
设备不支持地理移动。
• env:Sender - ter:InvalidArgVal - ter:UnreachablePosition
请求的转换超出了界限。
• env:Sender - ter:InvalidArgVal - ter:TimeoutNotSupported
指定的超时参数不在支持的超时时间范围内。
• env:Sender - ter:InvalidArgVal - ter:GeoLocationUnknown
由于地理位置未配置或不可用,该单元无法执行GeoMove。
访问权限类(ACCESS CLASS):
ACTUATE
5.3.5. 停止(Stop)
PTZ设备需支持停止操作。如果没有指定停止的参数,那么这个命令将停止所有正在进行的水平,俯仰和变焦动作。通过指定相应的停止参数可以停止对应的操作。
请求(REQUEST):
• ProfileToken [tt:ReferenceToken]
对现有媒体配置文件的引用
• PanTilt – 可选[xs:boolean]
停止水平和俯仰操作(默认为true)。
• Zoom – 可选[xs:boolean]
停止变焦操作(默认为true)。
响应(RESPONSE): 空消息
错误(FAULTS):
• env:Sender - ter:InvalidArgVal - ter:NoProfile
请求的配置文件token内ProfileToken不存在。
• env:Sender - ter:InvalidArgVal - ter:NoPTZProfile
请求的配置文件token未引用PTZ配置。
访问权限类(ACCESS CLASS):
ACTUATE
5.3.6. 移动并开始跟踪(MoveAndStartTracking)
设备PTZ节点有MoveAndTrack时应该支持这个命令。这个操作的目的是向设备发送一个自动命令:移动摄像机到想要的位置然后通过追踪算法代理PTZ操作。使用原子命令,延迟被最小化。移动位置是可选的且可以按照三种模式进行设置:
• 通过地理位置坐标
• 通过预置位token
• 通过PTZVector位置
请求位置移动的的速度参数优先于相应的PTZ配置的默认速度。如果引用空间含有速度参数,那么PTZ节点需支持速度空间。
如果在同一个设备中完成了侦察和追踪,那么ObjectID引用可以作为参数,以指定应跟踪哪个对象。
请求的绝对位置设备无法到达,则操作将失败。
请求(REQUEST):
• ProfileToken [tt:ReferenceToken]
对现有媒体配置文件的引用
• GeoLocation – 可选 [tt:GeoLocation]
可选目标坐标。
• PresetToken – 可选[tt:ReferenceToken]
对一个存在的预置位token的可选应用。
• TargetPosition – 可选[tt:PTZVector]
指定绝对目标位置的可选向量。
• Speed – 可选[tt:PTZSpeed]
可选速度矢量。
• ObjectID – 可选[tt:ObjectID]
要跟踪对象的可选Object ID。
响应(RESPONSE): 空消息
错误(FAULTS):
• env:Sender - ter:InvalidArgVal - ter:NoProfile
请求的配置文件token内ProfileToken不存在。
• env:Sender - ter:InvalidArgVal - ter:NoPTZProfile
请求的配置文件token未引用PTZ配置。
• env:Sender - ter:InvalidArgVal - ter:SpaceNotSupported
引用了PTZ节点不支持的空间。
• env:Sender - ter:InvalidArgVal - ter:InvalidPosition
请求的位置超出了界限。
• env:Sender - ter:InvalidArgVal - ter:InvalidSpeed
请求的速度超出了界限。
• env:Sender - ter:InvalidArgVal - ter:GeoMoveNotSupported
设备不支持地理移动。
• env:Sender - ter:InvalidArgVal - ter:UnreachablePosition
请求的转换超出了界限。
• env:Sender - ter:InvalidArgVal - ter:GeoLocationUnknown
由于地理位置未配置或不可用,该单元无法执行GeoMove。
• env:Sender - ter:InvalidArgVal - ter:NoToken
请求的预置位token不存在。
访问权限类(ACCESS CLASS):
ACTUATE
5.3.7. 状态获取(GetStatus)
PTZ设备需支持通过GetStatus命令报告PTZ状态。PTZ状态包含以下信息:
• 位置Position (可选) – 引用空间指定云台单元的绝对位置。相应PTZ配置的默认绝对空间应在位置元素中引用。如果设备有StatusPosition能力,则需要显示此信息。
• 移动状态MoveStatus(可选) – 表示水平/俯仰/变焦设备单元当前是否正在移动、空闲或处于位置状态。如果设备有MoveStatus能力,则需要显示此信息。未知状态不应在正常错误中使用,但是在初始化或错误状况下使用。
• 错误Error (可选) – 表示当前PTZ错误状态。MoveStatus未知状态时,显示这个字段。
• 国际标准时间 UTC Time – 指定生成状态时的UTC时间。
请求(REQUEST):
• ProfileToken [tt:ReferenceToken]
对现有媒体配置文件的引用
响应(RESPONSE): 空消息
• PTZStatus[tt:PTZStatus]
请求媒体文件的PTZStatus。
错误(FAULTS):
• env:Sender - ter:InvalidArgVal - ter:NoProfile
请求的配置文件token内ProfileToken不存在。
• env:Sender - ter:InvalidArgVal - ter:NoPTZProfile
请求的配置文件token未引用PTZ配置。
• env:Receiver – ter:Action - ter:NoStatus
请求的媒体配置文件中没有可用的PTZ状态。
访问权限类(ACCESS CLASS):
READ_MEDIA
posted @
2021-06-19 20:38 canaan 阅读(2349) |
评论 (0) |
编辑 收藏
摘要:
5.
服务
5.1
PTZ节点
5.1.1.
常规
支持PTZ的设备可以有多个PTZ节点。PTZ节点可以表示机械PTZ驱动器。上传的云台驱动程序或数字...
阅读全文
posted @
2021-06-17 16:34 canaan 阅读(1475) |
评论 (0) |
编辑 收藏
摘要: 1.
范围
本文档定义了用于配置和操作云台变焦控制器的web服务接口。此外,还定义了相关事件。
Web服务的使用不在本文档的范围内。请参考ONVIF核心规范。
2.
引用标准
ONVIF核心规范
<http://www...
阅读全文
posted @
2021-06-16 21:59 canaan 阅读(1657) |
评论 (0) |
编辑 收藏
纵观历史,一代代伟人,哲学家,或是帝国;
曾经的波斯帝国,你在哪里?
曾经的亚历山大,又去了何方,是否也渐渐被人遗忘?
埃及艳后,伊丽莎白,你们的名气虽大,但终归已是尘土。
横看世界,地球你在太阳系中算小的;
太阳系你在银河系中又是怎样的地位?
银河系啊,你在宇宙中又占哪个位置?
人啊,你在地球上可以算是一个管理者。
你今日为房子劳碌而委屈了自己,你自己有想过吗?
你昨日因为一件小事而闷闷生气,又何必呢?
我不知是明天太阳先升起,还是意外先来临。
曾经你相信生活不止眼前的苟且,现在还相信还有诗和远方的田野吗?
你是否将自己局限在自己想象的框架中了呢?
posted @
2017-08-05 23:26 canaan 阅读(911) |
评论 (2) |
编辑 收藏
c#与C++类型转换,网摘2011-12-08 8:33//c++:HANDLE(void *) ---- c#:System.IntPtr
//c++:Byte(unsigned char) ---- c#:System.Byte
//c++:SHORT(short) ---- c#:System.Int16
//c++:WORD(unsigned short) ---- c#:System.UInt16
//c++:INT(int) ---- c#:System.Int16
//c++:INT(int) ---- c#:System.Int32
//c++:UINT(unsigned int) ---- c#:System.UInt16
//c++:UINT(unsigned int) ---- c#:System.UInt32
//c++:LONG(long) ---- c#:System.Int32
//c++:ULONG(unsigned long) ---- c#:System.UInt32
//c++:DWORD(unsigned long) ---- c#:System.UInt32
//c++:DECIMAL ---- c#:System.Decimal
//c++:BOOL(long) ---- c#:System.Boolean
//c++:CHAR(char) ---- c#:System.Char
//c++:LPSTR(char *) ---- c#:System.String
//c++:LPWSTR(wchar_t *) ---- c#:System.String
//c++:LPCSTR(const char *) ---- c#:System.String
//c++:LPCWSTR(const wchar_t *) ---- c#:System.String
//c++:PCAHR(char *) ---- c#:System.String
//c++:BSTR ---- c#:System.String
//c++:FLOAT(float) ---- c#:System.Single
//c++:DOUBLE(double) ---- c#:System.Double
//c++:VARIANT ---- c#:System.Object
//c++:PBYTE(byte *) ---- c#:System.Byte[]
//c++:BSTR ---- c#:StringBuilder
//c++:LPCTSTR ---- c#:StringBuilder
//c++:LPCTSTR ---- c#:string
//c++:LPTSTR ---- c#:[MarshalAs(UnmanagedType.LPTStr)] string
//c++:LPTSTR 输出变量名 ---- c#:StringBuilder 输出变量名
//c++:LPCWSTR ---- c#:IntPtr
//c++:BOOL ---- c#:bool
//c++:HMODULE ---- c#:IntPtr
//c++:HINSTANCE ---- c#:IntPtr
//c++:结构体 ---- c#:public struct 结构体{};
//c++:结构体 **变量名 ---- c#:out 变量名
//C#中提前申明一个结构体实例化后的变量名
//c++:结构体 &变量名 ---- c#:ref 结构体变量名
//c++:WORD ---- c#:ushort
//c++:DWORD ---- c#:uint
//c++:DWORD ---- c#:int
//c++:UCHAR ---- c#:int
//c++:UCHAR ---- c#:byte
//c++:UCHAR* ---- c#:string
//c++:UCHAR* ---- c#:IntPtr
//c++:GUID ---- c#:Guid
//c++:Handle ---- c#:IntPtr
//c++:HWND ---- c#:IntPtr
//c++:DWORD ---- c#:int
//c++:COLORREF ---- c#:uint
//c++:unsigned char ---- c#:byte
//c++:unsigned char * ---- c#:ref byte
//c++:unsigned char * ---- c#:[MarshalAs(UnmanagedType.LPArray)] byte[]
//c++:unsigned char * ---- c#:[MarshalAs(UnmanagedType.LPArray)] Intptr
//c++:unsigned char & ---- c#:ref byte
//c++:unsigned char 变量名 ---- c#:byte 变量名
//c++:unsigned short 变量名 ---- c#:ushort 变量名
//c++:unsigned int 变量名 ---- c#:uint 变量名
//c++:unsigned long 变量名 ---- c#:ulong 变量名
//c++:char 变量名 ---- c#:byte 变量名
//C++中一个字符用一个字节表示,C#中一个字符用两个字节表示
//c++:char 数组名[数组大小] ---- c#:MarshalAs(UnmanagedType.ByValTStr, SizeConst = 数组大小)]
public string 数组名; ushort
//c++:char * ---- c#:string
//传入参数
//c++:char * ---- c#:StringBuilder
//传出参数
//c++:char *变量名 ---- c#:ref string 变量名
//c++:char *输入变量名 ---- c#:string 输入变量名
//c++:char *输出变量名 ---- c#:[MarshalAs(UnmanagedType.LPStr)] StringBuilder 输出变量名
//c++:char ** ---- c#:string
//c++:char **变量名 ---- c#:ref string 变量名
//c++:const char * ---- c#:string
//c++:char[] ---- c#:string
//c++:char 变量名[数组大小] ---- c#:[MarshalAs(UnmanagedType.ByValTStr,SizeConst=数组大小)] public string 变量名;
//c++:struct 结构体名 *变量名 ---- c#:ref 结构体名变量名
//c++:委托 变量名 ---- c#:委托变量名
//c++:int ---- c#:int
//c++:int ---- c#:ref int
//c++:int & ---- c#:ref int
//c++:int * ---- c#:ref int
//C#中调用前需定义int 变量名 = 0;
//c++:*int ---- c#:IntPtr
//c++:int32 PIPTR * ---- c#:int32[]
//c++:float PIPTR * ---- c#:float[]
//c++:double** 数组名 ---- c#:ref double 数组名
//c++:double*[] 数组名 ---- c#:ref double 数组名
//c++:long ---- c#:int
//c++:ulong ---- c#:int
//c++:UINT8 * ---- c#:ref byte
//C#中调用前需定义byte 变量名 = new byte();
//c++:handle ---- c#:IntPtr
//c++:hwnd ---- c#:IntPtr
//c++:void * ---- c#:IntPtr
//c++:void * user_obj_param ---- c#:IntPtr user_obj_param
//c++:void * 对象名称 ---- c#:([MarshalAs(UnmanagedType.AsAny)]Object 对象名称
//c++:char, INT8, SBYTE, CHAR ---- c#:System.SByte
//c++:short, short int, INT16, SHORT ---- c#:System.Int16
//c++:int, long, long int, INT32, LONG32, BOOL , INT ---- c#:System.Int32
//c++:__int64, INT64, LONGLONG ---- c#:System.Int64
//c++:unsigned char, UINT8, UCHAR , BYTE ---- c#:System.Byte
//c++:unsigned short, UINT16, USHORT, WORD, ATOM, WCHAR , __wchar_t ---- c#:System.UInt16
//c++:unsigned, unsigned int, UINT32, ULONG32, DWORD32, ULONG, DWORD, UINT ---- c#:System.UInt32
//c++:unsigned __int64, UINT64, DWORDLONG, ULONGLONG ---- c#:System.UInt64
//c++:float, FLOAT ---- c#:System.Single
//c++:double, long double, DOUBLE ---- c#:System.Double
//Win32 Types ---- CLR Type
//Struct需要在C#里重新定义一个Struct
//CallBack回调函数需要封装在一个委托里,delegate static extern int FunCallBack(string str);
//unsigned char** ppImage替换成IntPtr ppImage
//int& nWidth替换成ref int nWidth
//int*, int&, 则都可用 ref int 对应
//双针指类型参数,可以用 ref IntPtr
//函数指针使用c++: typedef double (*fun_type1)(double); 对应 c#:public delegate double fun_type1(double);
//char* 的操作c++: char*; 对应 c#:StringBuilder;
//c#中使用指针:在需要使用指针的地方 加 unsafe
//unsigned char对应public byte
posted @
2016-07-22 14:36 canaan 阅读(360) |
评论 (0) |
编辑 收藏
提示:学习这课之前,我们假设你已经知道如何用imread载入图像并用imshow显示在窗口中。 如果还不知道那么先看
目标:
在这个教程中你将会学到:
1、使用
imread载入图像
2、使用
cvtColor将图像冲
BGR格式转换为
Grayscale格式
3、使用
imwrite将转换好的图像保存到硬盘上
源码: 1 #include <cv.h>
2 #include <highgui.h>
3
4 using namespace cv;
5
6 int main(int argc, char ** argv)
7 {
8 char* imageName = argv[1];
9 Mat image;
10 image = imread(imageName, 1);
11
12 if (2 != argc || !image.data)
13 {
14 printf("No image data\n");
15 return -1;
16 }
17
18 Mat gray_image;
19 cvtColor(image, gray_image, CV_BGR2GRAY);
20
21 imwrite("D:/images/Gray_Image.jpg", gray_image);
22
23 namedWindow(imageName, CV_WINDOW_AUTOSIZE);
24 namedWindow("Gray image", CV_WINDOW_AUTOSIZE);
25
26 imshow(imageName, image);
27 imshow("Gray image", gray_image);
28
29 waitKey(0);
30 return 0;
31 }
说明:1、通过
imread载入一个
BGR图像。
2、将图像冲
BGR转换成
Grayscale格式:
cvtColor( image, gray_image, CV_BGR2GRAY);cvtColor参数:
a、源图像(
image)b、目标图像(
gray_image),用于保存转换好的图像。
c、指定转换类型。
3、保存图像
imwrite("../../images/Gray_Image.jpg", gray_image);4、最后通过窗口显示图像,查看转换效果。
namedWindow(imageName, CV_WINDOW_AUTOSIZE);
namedWindow("Gray image", CV_WINDOW_AUTOSIZE);
imshow(imageName, image);
imshow("Gray image", gray_image);
结果:
posted @
2016-07-12 07:40 canaan 阅读(1100) |
评论 (0) |
编辑 收藏
目标学习:1、使用
imread载入图像。
2、使用
namedWindow创建命名OpenCV窗口。
3、使用
imshow在OpenCV窗口中显示图像。
源码:
1 #include <opencv2/core/core.hpp>
2 #include <opencv2/highgui/highgui.hpp>
3 #include <iostream>
4
5 using namespace cv;
6 using namespace std;
7
8 int main(int argc, char ** argv)
9 {
10 if (2 != argc)
11 {
12 cout << " Usage: display_image ImageToLoadAndDisplay" << endl;
13 return -1;
14 }
15
16 Mat image;
17 image = imread(argv[1], CV_LOAD_IMAGE_COLOR); // Read the file
18
19 if (!image.data) // Check for invalid input
20 {
21 cout << "Could not open or find the image" << std::endl;
22 return -1;
23 }
24
25 namedWindow("Display window", WINDOW_AUTOSIZE); // Create a window for display
26 imshow("Display window", image); // Show our image inside it.
27
28 waitKey(0); // wait for a keystroke in the window
29 return 0;
30 }
说明:
在使用OpenCV 2 的功能之前,几乎总是要包含
1、
core 部分,定义库的基本构建块
2、
highgui模块,包含输入输出操作函数。
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
还需要include<iostream>这样更容易在console上输出输入。为了避免数据结构和函数名称与其他库冲突,OpenCV有自己的命名空间
cv。当然为了避免在每个关键字前都加cv::keyword,可以在头部导入该命名空间。
using namespace cv;using namespace std;需要在命令行输入有效的图像名称。
if (2 != argc)
{
cout << " Usage: display_image ImageToLoadAndDisplay" << endl;
return -1;
}然后创建
Mat对象用于存储载入的图像数据。
Mat image;调用
imread函数载入图像(图像名称为
argv[1]指定的)。第二个参数指定图像格式。
1、CV_LOAD_IMAGE_UNCHANGED (<0) loads the image as is(including the alpha channel if present)2、CV_LOAD_IMAGE_GRAYSCALE (0) loads the image as an intensity one3、CV_LOAD_IMAGE_COLOR (>0) loads the image in the BGR formatimage = imread(argv[1], CV_LOAD_IMAGE_COLOR); // Read the file
如果第二个参数未指定,那么默认为CV_LOAD_IMAGE_COLOR为了检查图像是否正常载入,我们用
namedWindow函数创建一个OpenCV窗口来显示图像。需要指定窗口名称和大小。
第二个参数默认为:WINDOW_AUTOSIZE
1、
WINDOW_AUTOSIZE 只支持QT平台。
2、
WINDOW_NORMAL QT上支持窗口调整大小。
最后在创建的窗口中显示图像
imshow("Display window", image);
结果
编译执行程序。
./DisplayImage d:\apple.jpg
posted @
2016-07-11 07:58 canaan 阅读(939) |
评论 (0) |
编辑 收藏
中国 中华 伟大 民国 民族,
如何生成所有组合(例:中国,中华民族,中华民国,伟大中华,伟大中华民族) 。
注意:中华民国,民国中华 算一个。
posted @
2012-11-13 11:57 canaan 阅读(271) |
评论 (0) |
编辑 收藏
In the Internet address family, this structure is used by Windows Sockets to specify a local or remote endpoint address to which to connect a socket. This is the form of the sockaddr structure specific to the Internet address family and can be cast to sockaddr.
1 struct sockaddr_in
2 {
3 short sin_family; // (16位)地址家族(即指定地址格式),应为AF_INET。internetwork: UDP, TCP, etc.
4 unsigned short sin_port; // (16位)端口号
5 struct in_addr sin_addr // (32位) IP地址
6 char sin_zero[8]; // (64位) 填充,使结构体与SOCKADDR大小相同
7 }
8
9 总共为:128位(即16字节)
需要头文件:winsock2.h
posted @
2012-07-12 16:28 canaan 阅读(1194) |
评论 (0) |
编辑 收藏
1 void inplace_swap(int *x, int *y)
2 {
3 *y = *x ^ *y;
4 *x = *x ^ *y;
5 *y = *x ^ *y;
6 }
posted @
2012-05-29 13:58 canaan 阅读(1754) |
评论 (6) |
编辑 收藏