/*
* =====================================================================================
*
* 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. 解决ie8不兼容jquery trim问题

    /*为原形添加方法*/String.prototype.trimBoth = function() { return this.replace(/(^\s*)|(\s*$)/g, "&quo ...

  2. javascript调用外部wpf的方法

    今天因为项目需要在wpf嵌入web页面,然后在web页面调用wpf的方法,于是突击学习了一下,记下备忘.^_^ 1.wpf中新建一个类WpfForScriptingHelper namespace w ...

  3. Pjax介绍及在asp.net MVC3中使用pjax的简单示例

    相信很多人对ajax并不陌生,对ajax的一些优点也了如指掌,如:局部刷新改善用户体验,减少开销,让服务器和浏览器之间的响应更快等. 但是它的缺点也是很显而易见的: AJAX大量的使用了javascr ...

  4. pywinauto简单介绍

    Pywinauto是基于Python开发的,用于自动化测试的脚本模块,主要操作于Windows标准图形界面.它可以允许你很容易的发送鼠标.键盘动作给Windows的对话框和控件. 其中,最主要功能为对 ...

  5. 原生 JavaScript 图片裁剪效果

    图片裁剪程序效果如下,可鼠标操作.   拖动左边小方框时在右侧实时显示对应的裁剪图片,同时左侧的拖动框里图片完全显示,拖动框外部图片模糊显示.8个控制点可以对显示区域大小进行控制. HTML 和 CS ...

  6. 设置html滚动条(陶庭飞问题)

    var height = document.body.scrollHeight; parent.document.all("rightFrame").style.height = ...

  7. Spring 数据源配置一:单一数据源

    最近遇到一个项目,需要访问都多个数据源,并且数据库是不同厂商(mysql,  sqlserver). 所以对此做了一些研究,这里咱们采用渐进的方式来展开,先谈谈单一数据源配置.(稍后有时间会陆续补充其 ...

  8. ASP.NET MVC中HttpContext, HttpContextBase, HttpContextWrapper联系

    ttpContext HttpContext是最原始的ASP.NET Context. MVC的目的之一是能够单元测试.HttpContext没有base class,并且不是virtual,所以不能 ...

  9. [dp]POJ2559 && HDOJ1506 Largest Rectangle in a Histogram

    题意 给n个条形的高度, 问能放的最大矩形面积 分析: 从左到右 从右到左 各搞一遍 分别记录      L[i]记录列(从前往后)标 第几列开始 可以往后放高度为a[i]的矩形  R[i]记录列(从 ...

  10. 基于FFmpeg和Qt的播放器 QtAV库

    http://blog.csdn.net/ibingow/article/details/8144795