OpenCV中,IplImage* 与Mat相互转化
IplImage* img = NULL;
cv::Mat cvDepthImg;
img=&cvDepthImg.operator IplImage();//Mat 把Mat转换成IplImage*
cv::Mat SiuImage;
SiuImage = cv::Mat(img);//把IplImage*转换成Mat
OpenCV中,IplImage* 与Mat相互转化
IplImage* img = NULL;
cv::Mat cvDepthImg;
img=&cvDepthImg.operator IplImage();//Mat 把Mat转换成IplImage*
cv::Mat SiuImage;
SiuImage = cv::Mat(img);//把IplImage*转换成Mat
这篇文章是参考http://www.cnblogs.com/freedomshe/archive/2012/04/25/2470540.html
略有改进~
1.安装软件
先下载安装VS2010和OpenCV2.4.4.OpenCV的下载地址为: http://pan.baidu.com/s/1xomHC
点击解压和安装OpenCV,我安装的位置是D:\opencv ,下面一些地址配置都是在这个地址的基础上配置的,如果大家安装得不一样,记得修改这个地址.
2.配置环境变量
计算机->(右键)属性->高级系统设置->高级(标签)->环境变量->(双击)path(用户,系统里面的path任选其一)->在变量值里面添加
“D:\opencv\build\x86\vc10\bin;”和”D:\opencv\build\x86\vc10\bin;”
3.配置工程属性
1)项目(菜单项)->…属性->VC++目录:需要配置“包含目录”和“库目录”两项。
2)在包含目录中点击下拉->编辑,添加路径”D:\opencv\build\include;”即可
3)库目录同上,在库目录中点击下拉->编辑,添加路径”D:\opencv\build\x86\vc10\lib;”即可
4)配置连接器:项目(菜单项)->…属性->连接器->输入->附加依赖项
添加以下库(我的库是2.4.4,假如你用的是2.4.8,则把每个lib文件名字的244改为248即可)
opencv_nonfree244d.lib
opencv_legacy244d.lib
opencv_calib3d244d.lib
opencv_contrib244d.lib
opencv_core244d.lib
opencv_features2d244d.lib
opencv_flann244d.lib
opencv_gpu244d.lib
opencv_highgui244d.lib
opencv_imgproc244d.lib
opencv_ml244d.lib
opencv_objdetect244d.lib
opencv_ts244d.lib
opencv_video244d.lib
这次主要是实现服务器的基本连接和读取功能,使得能够使用浏览器访问服务器,并且服务器输出浏览器的请求信息(即Http请求报文),主要流程如下:
1.创建一个socket;
2.设置sockaddr_in中的地址和端口信息;
PS:如果是绑定本机任意一个ip地址,则sin_addr.s_addr设置为INADDR_ANY,如果是固定的一个ip,如127.0.0.1,则需要使用inet_addr(“127.0.0.1”)把字符串转换成网络字节序;
3.使用bind绑定socket;
4.使用listen监听文件描述符;
5.进入while循环,使用accept函数进行阻塞等待客户端连接;
6.如果连接成功,则使用read读取内容,并进行显示。
下图为使用浏览器访问时的截图,我们可以清晰地看到http报文请求信息:
[c language=”++”]
#include<stdio.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#include<string.h>
#include<unistd.h>
#include<errno.h>
//简单的服务器实现
int main()
{
printf("server is running…\n");
int listenFd,connectFd;
int res;
listenFd = socket(AF_INET,SOCK_STREAM,0);//创建一个套接字
//设置地址和监听端口
sockaddr_in servAddr;//netinet/in.hi
bzero(&servAddr,sizeof(servAddr));//string.h
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = INADDR_ANY;// inet_addr("127.0.0.1");//把字符串的ip转换成网络序
servAddr.sin_port = htons(8800);//arpa/inet.h 把short型从主机序转换成网络序
res = bind(listenFd,(sockaddr*)&servAddr,sizeof(servAddr));//需要把sockaddr_in强制转换成sockaddr
if(res<0)
{
printf("bind error\n");
}
int backlog;
listen(listenFd,backlog);
printf("listening…\n");
while(1)
{
printf("connecting…\n");
sockaddr_in cliAddr;
socklen_t addrLength = sizeof(sockaddr_in);
connectFd = accept(listenFd,(sockaddr*)&cliAddr,&addrLength);
printf("connect success!\n");
//进行读取
char buffer[1024];
//读取循环
while(1)
{
bzero(buffer,sizeof(buffer));
int readSize=read(connectFd,buffer,1024);//unistd.h
printf("%s",buffer);
if(readSize==0)//读取完毕
break;//跳出循环
}
//显示完毕后,关闭fd
close(connectFd);//unistd.h
}
return 0;
}
[/c]
1.gcc是编译c语言的命令,所以使用了cout会编译失败。
2.应该采用g++进行编译,g++对扩展名为.c和.cpp的文件都进行c++编译。
解决办法是将引用的DLL:Microsoft.Office.Interop.Excel;的嵌入互操作类型改为false,就可以了。