/*
* =====================================================================================
*
* Filename: main.cpp
* Environment:
* Description: SR4K的API使用(libMesaSR.dll)
*
*
* Version: 1.0
* Created: 2013/10/30 20:47:31
* Author: yuliyang
I*
* Mail: wzyuliyang911@gmail.com
* Blog: http://www.cnblogs.com/yuliyang
*
* =====================================================================================
*/ #include "definesSR.h"
#include "libMesaSR.h"
#include <stdio.h>
#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
using namespace std; /*------------------------------------------------------------------------------------------------------------
*
* 从内存中dump出内容
* 共144*176*sizeof(unsigned short int类型)个字节
*
*------------------------------------------------------------------------------------------------------------*/
//void Dump(unsigned char* p,int num)
//{
// puts("Dump of memory byte by byte regrouped in blocks of 8 byte\n"\
// " bytes: 0 1 2 3 4 5 6 7| 8 9 a b c d e f|1011121314151617|18191a1b1c1d1e1f|\n"\
// "--------:-----------------+----------------+----------------+----------------|");
// for(int i=0;i<num;i++)
// {
// if(!(i&0x1f))
// {
// printf("%08x: ",i);
// }
// printf("%02x",p[i]);
//
// if(!((i+1)&0x07))
// {
// putchar('|');
// if(!((i+1)&0x1f))
// {
// putchar('\n');
// }
// }
// }
// putchar('\n');
//}
int main(){ /*------------------------------------------------------------------------------------------------------------
* 创建一个SR4K设备对象
*------------------------------------------------------------------------------------------------------------*/
CMesaDevice *cam=NULL; SR_OpenDlg(&cam,,NULL); /*------------------------------------------------------------------------------------------------------------
* 设置工作模式在15MHZ
*------------------------------------------------------------------------------------------------------------*/
SR_SetModulationFrequency(cam,MF_15MHz);
SR_SetMode(cam,AM_COR_FIX_PTRN|AM_CONV_GRAY|AM_DENOISE_ANF); /* 其他一些属性的设置:去噪等 */ /*------------------------------------------------------------------------------------------------------------
* 获取行数和列数
*------------------------------------------------------------------------------------------------------------*/
int r= SR_GetRows(cam);
int c= SR_GetCols(cam); size_t bufSz=r*c**sizeof(unsigned int); /* 创建缓存 3种图像,depth图,Amplitude幅度图,和确信度图 */
void *buf=malloc(bufSz);
memset(buf,0xaf,bufSz); /* 缓存区清零 */
/*------------------------------------------------------------------------------------------------------------
* 以下用于坐标变换,转到笛卡尔坐标系
*------------------------------------------------------------------------------------------------------------*/
short *xS16=(short*)buf, *yS16=&xS16[r*c]; WORD *zU16=(WORD*)&yS16[r*c];
int pitchS16X=sizeof(short), pitchS16Y=sizeof(short), pitchU16Z=sizeof(WORD);
SR_Acquire(cam);
// SR_CoordTrfUint16(cam, 0, 0, zU16, pitchS16X, pitchS16Y, pitchU16Z);
SR_CoordTrfUint16(cam, xS16, yS16, zU16, pitchS16X, pitchS16Y, pitchU16Z); int num=SR_Acquire(cam); /* 触发设备获取图像 */
ImgEntry *images;
int numImg=SR_GetImageList(cam,&images); /* 获得图像列表 */
cout<<numImg<<endl;
void * data; /* 指向图像数据部分的指针 */ data=SR_GetImage(cam, );
/*------------------------------------------------------------------------------------------------------------
* 用opencv显示图像
*------------------------------------------------------------------------------------------------------------*/
IplImage *temp=cvCreateImage(cvSize(,),IPL_DEPTH_16U,);
unsigned short int * pdata;
pdata=(unsigned short int*)data;
for (int i=;i<temp->height;i++)
{
for (int j=;j<temp->width;j++)
{
CV_IMAGE_ELEM( temp, unsigned short int, i, j)=*pdata; /* 给图像赋值 */
pdata++; }
} /*------------------------------------------------------------------------------------------------------------
* 显示图像
*------------------------------------------------------------------------------------------------------------*/
cvShowImage("",temp);
cvWaitKey();
cvDestroyWindow("");
cvReleaseImage(&temp); /*for(int i=0;i<numImg;i++)
{
data=SR_GetImage(cam, i);
Dump((unsigned char*)data,(int)r*c*2);
}*/
/*WORD w1=images->width;
WORD h1=images->height;
cout<<images->dataType<<endl;
cout<<images->imgType<<endl; cout<<w1<<endl;
cout<<h1<<endl;*/
//SR_GetImage(cam,0);
//SR_StreamToFile(cam,"11.srs",0); /* 导出srs格式文件 */
//SR_StreamToFile(cam,"11.srs",2);
//SR_CoordTrfFlt(cam, x, y, z, sizeof(float) , sizeof(float) , sizeof(float)); /*-----------------------------------------------------------------------------
* 释放内存
*-----------------------------------------------------------------------------*/
SR_Close(cam) ;
free(buf); //free allocated buffers return ;
}

测试结果:

sr4000自带API和opencv结合获取图像的更多相关文章

  1. 通过zabbix自带api进行主机的批量添加操作

    通过zabbix自带api进行批量添加主机 我们需要监控一台服务器的时候,当客户端装好zabbix-agent端并正确配置以后,需要在zabbix-server的web gui界面进行添加zabbix ...

  2. OpenCV开发笔记(七十三):红胖子8分钟带你使用opencv+dnn+yolov3识别物体

      前言   级联分类器的效果并不是很好,准确度相对深度学习较低,上一章节使用了dnn中的tensorflow,本章使用yolov3模型,识别出具体的分类.   Demo   320x320,置信度0 ...

  3. 修改SR4000自带软件,支持opencv

      /*----------------------------------------------------------------------------- * * 版权声明: * 可以任意转载 ...

  4. SR4000自带软件修改(二)

    /*----------------------------------------------------------------------------- *   *   版权声明: *   可以 ...

  5. [Android Studio] Using API of OpenCV DNN

    前言 一.故事背景 NDK方法人脸识别 OpenCV4Android系列: 1. OpenCV4Android开发实录(1):移植OpenCV3.3.0库到Android Studio 2.OpenC ...

  6. OpenCV开发笔记(七十二):红胖子8分钟带你使用opencv+dnn+tensorFlow识别物体

    前言   级联分类器的效果并不是很好,准确度相对深度学习较低,本章使用opencv通过tensorflow深度学习,检测已有模型的分类.   Demo       可以猜测,1其实是人,18序号类是狗 ...

  7. JAVA自带API的压缩与解压

    Java API中的 java.util.zip.*;包下包含了Java对于压缩文件的所有相关操作.我们可以使用该包中的方法,结合IO中的相关知识,进行文件的压缩和解压缩相关操作. ZipFile j ...

  8. OpenCV 中获取图像或矩阵最大、最小值的简便方法

    C++: void minMaxLoc(InputArray src, double* minVal, double* maxVal=0, Point* minLoc=0, Point* maxLoc ...

  9. Unity三种截屏方法(非自带API)

    者利用了三种表现形式: 1,选择截图路径的方法 2,直接截取截屏的方法 3,截取鼠标圈选区域. 上代码,: 第一种是调用.net的类库,需要引用System.Windows.Forms.dll,在As ...

随机推荐

  1. 使用weinre通过PC浏览器调试手机网页

    Weinre是什么? Weinre代表Web Inspector Remote,是一种远程调试工具.举个例子,在电脑上可以即时的更改手机上对应网页的页面元素.样式表, 或是查看Javascript变量 ...

  2. Mac OS X下GnuPlot的安装和配置(无法set term png等图片输出)

    今天使用gitstats分析git repo的活动信息,发现其内部使用gnuplot,结果发现无法生成png图片,进入gnuplot的shell发现无法设置png格式输出.如下 gnuplot> ...

  3. jquery点击其他地方隐藏div层的实现程序

    js代码 $(document).ready(function() { //语言头部的点击事件,显示语言列表 $(".language_selected").click(funct ...

  4. ECshop网店系统百万级商品量性能优化-加快首页访问速度

    如果ECshop的商品数达到几万,十几万的时候,如果首页没有缓存,第一次访问的时候,你会发现其慢无比,原因就是清空了Cache后或者没有Cache的情况下,ECshop会Bulid一些Cache数据, ...

  5. Delphi中的GetEnumName和GetEnumValue的使用方法

    利用TypInfo单元的GetEnumName和GetEnumValue可以遍历任意枚举类型,并获取其名称和值.下面是示例Demo. uses TypInfo; ... procedure TForm ...

  6. Tips of Python!

    Tips of Python!(Python 2.7) (不定期更新中-) 1. raw_input() 和 input(): raw_input() 将输入原封不动的保存为一个字符串 输入 1 + ...

  7. python制作安装包(setup.py)

    1.制作setup.py from distutils.core import setup setup(name='Myblog', version='1.0', description='My Bl ...

  8. 六,WPF的Application类

    Application.ShutdownMode属性:通过,只要有一个窗口还没有关闭,Application类就保持应用程序处于有效状态,如果这不是所期望的行为,就可以调整该属性. 应用程序事件 Ap ...

  9. mysql将多张表COUNT的数据相加

    由于数据量过大,我们将根据用户id 将数据存储在不同的表中,根据用户id模10的余数作为表的后缀.有如下十张表:test_0, test_1, ... ,test_9现在需要根据某个条件查询统计数据我 ...

  10. linux下使用split 来分割大文件

    linux下使用split 来分割大文件 2010-07-27 15:46:27|  分类: 技术文稿 |  标签:split  分割  linux   |字号 订阅   平常都是使用ssh来进行远程 ...