随笔 - 43  文章 - 39  trackbacks - 0
<2017年11月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

常用链接

留言簿(2)

随笔分类

随笔档案

友情链接

搜索

  •  

最新评论

阅读排行榜

评论排行榜

纵观历史,一代代伟人,哲学家,或是帝国;
曾经的波斯帝国,你在哪里?
曾经的亚历山大,又去了何方,是否也渐渐被人遗忘?
埃及艳后,伊丽莎白,你们的名气虽大,但终归已是尘土。

横看世界,地球你在太阳系中算小的;
太阳系你在银河系中又是怎样的地位?
银河系啊,你在宇宙中又占哪个位置?

人啊,你在地球上可以算是一个管理者。
你今日为房子劳碌而委屈了自己,你自己有想过吗?
你昨日因为一件小事而闷闷生气,又何必呢?

我不知是明天太阳先升起,还是意外先来临。
曾经你相信生活不止眼前的苟且,现在还相信还有诗和远方的田野吗?

你是否将自己局限在自己想象的框架中了呢?

posted @ 2017-08-05 23:26 canaan 阅读(366) | 评论 (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 阅读(51) | 评论 (0)编辑 收藏
提示:学习这课之前,我们假设你已经知道如何用imread载入图像并用imshow显示在窗口中。 如果还不知道那么先看
新手入门学习OpenCV2.4.13 载入并显示图像 (二)
目标:
在这个教程中你将会学到:
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 阅读(616) | 评论 (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 one
3、CV_LOAD_IMAGE_COLOR (>0) loads the image in the BGR format

image = 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 阅读(241) | 评论 (0)编辑 收藏
中国 中华 伟大 民国 民族,
如何生成所有组合(例:中国,中华民族,中华民国,伟大中华,伟大中华民族) 。
注意:中华民国,民国中华 算一个。
posted @ 2012-11-13 11:57 canaan 阅读(125) | 评论 (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 阅读(858) | 评论 (0)编辑 收藏
1 void inplace_swap(int *x, int *y)
2 {
3     *= *^ *y;
4     *= *^ *y;
5     *= *^ *y;
6 }
posted @ 2012-05-29 13:58 canaan 阅读(1403) | 评论 (6)编辑 收藏
例子:

环境:linux
编译器:gcc
源码:hello.c

1 #include <stdio.h>
2 
3 int main()
4 {
5       printf("hello, world\n");
6 }


:~$ gcc -o hello hello.c

1、 源码文件hello.c           通过预处理器->修改过的源码文件hello.i
2、                     hello.i   通过编译器->汇编代码hello.s
3、                    hello.s   通过汇编器->浮动文件hello.o
4、        hello.o+printf.o   通过连接器->可执行文件hello。



1、预处理阶段    预处理器(cpp)根据#后面的指令修改源代码。例:hello.c中的#include <stdio.h> 命令告诉预处理器把系统头文件stdio.h插入到程序中生产另外一个C程序,一般后缀名为.i。

2、编译阶段       编译器(cc1)把hello.i文件转化成汇编代码hello.s文件。

3、汇编阶段       汇编器(as)把hello.s转化成机器语言指令浮动文件程序hello.o。

4、连接阶段       hello程序调用了标准C库printf函数。连接器(ld)把printf.o和hello.o连接成hello可执行文件。
posted @ 2012-05-24 14:10 canaan 阅读(1757) | 评论 (2)编辑 收藏
本书的目标读者是那些希望自己变得更有效、更多产的程序员。或许你在因为不能实现自己的潜力而沮丧。或许你看到你的同事使用来使它们比你更多产。也许你当前的工作使用比较老的技术,你想知道怎样把教新的思想应用于你的工作。

我们不会假装拥有所有(或大部分)的答案,我们的观念也不会适用于所有的情况。我们所能说的只是,如果你遵循我们的方法,你将会快速的获得经验,你的生产力将会提高,会对整个开发过程更加理解。你将能编写更好的软件。
posted @ 2012-04-17 12:40 canaan 阅读(1434) | 评论 (0)编辑 收藏
序言

本书将会帮助你成为一个更好的程序员

不管你是个人开发者,还是大项目团队中的一员,或者是同时为很多客户共事的顾问。本书将会帮助你,作为一个人体,更好地完成工作。本书不是理论书籍--我们专注于实际问题,利用你的经验作出更有见识的决定。pragmatic词来自拉丁语的pragmaticus--“商业技巧”--后者又源于希腊(...),意思是“去做。”这是一本关于“去做(doing)”的书。

编程是一门手艺。用最简单的话来说就是让计算机做你(或者用户)想让它做的事情。作为一个程序员,你既是聆听者,又是顾问,既是翻译员,又是专制者。你尝试着捕捉这些难以捉摸的需求,用一种方法来描述它们,让一台纯粹的机器能够合理的处理它们。你尝试着记录你的工作,以使他人能够理解它;你还尝试着策划你的工作,以使他人能够在上面构建。另外,你尝试着在项目时钟的冷酷地催逼下完成这些工作。你每天都在创造小奇迹。

这是一个困难的工作

很多人声称要给你提供帮助。工具供应商吹捧他们的产品所展现出来的奇迹。方法学大师承诺他们的技术保证有效。每个人都声称他们的编程语言是最好的,而每个操作系统都是这些问题的可信赖的解答。

当然,这些都不是真的。没有这么简单的答案。不存最好的解决方案,无论是工具,语言,或者一个操作系统。而存在的只是在某些特定的环境下更为合适的系统。

这就是务实的开始。你不应该局限于任何特定的技术,而是应该拥有足够宽广的背景和经验基础来为特定的情况选择一种好的解决方案。你的背景源自于对计算机科学基本原则的理解,你的经验来自于广泛的实际项目。理论与实践的结合使你变得强大。

你调整方法来适应当前的情形与环境。你判断这些所有因素中相对重要的因素来影响项目,使用你的经验来制作适合的解决方案。你随着工作的进展持续着这些活动。务实的程序员不仅要完成工作,而且要做的漂亮
posted @ 2012-04-17 12:01 canaan 阅读(1358) | 评论 (0)编辑 收藏
仅列出标题  下一页