/*
* =====================================================================================
*
* 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. Django基本操作命令

    1.新建一个django项目 django-admin.py startproject project-name 2.新建一个app python manage.py startapp app-nam ...

  2. 学会Twitter Bootstrap不再难

    Twitter Bootstrap 3.0 是对其过去的重大改变,现在它更偏向于移动应用的框架,并且宣称是最好的web设计css框架之一,的确如此. 可能有人曾经使用过Twitter Bootstra ...

  3. 2016031901 - U盘安装ubuntu系统

    使用U盘安装ubuntu系统 01.进入u盘安装 个人使用的是闪迪U盘安装 02. 个人重装ubuntu 03.进入ubuntu安装界面 04.进入语言界面 05.准备安装ubuntu 06.ubun ...

  4. 2014年度辛星html教程夏季版第六节

    不知道这样大家会不会感觉枯燥,总之不管大家怎么样,辛星始终会陪伴大家的,期待您的关注和支持,也衷心的希望我的博客能让您少走弯路,获得更系统的知识. ***************表格********* ...

  5. PL/SQL — 显式游标

    一.游标的相关概念及特性 1.定义 通过游标方式定位到结果集中某个特定的行,然后根据业务需求对该行进行相应特定的操作. 2.分类 显示游标: 用户自定义游标,用于处理select语句返回的多行数据. ...

  6. NGUI系列教程六(技能冷却的CD效果)

    今天来学习一下,如何利用NGUI做技能冷却的CD效果. 1,首先按之前的教程Create Your UI,Camera为Simple 2D 最终如下图: 2,添加一个按钮,Background 为一张 ...

  7. 设置BootStrap导航条的高度

    只要加上这段css就可以覆盖Bootstrap.css的代码,定制符合自己的样式 .navbar { min-height: 40px; } .nav > li > a { padding ...

  8. BZOJ 3996 [TJOI 2015] 线性代数 解题报告

    首先,我们可以得到: $$D = \sum_{i=1}^{n}\sum_{j=1}^{n}a_i\times a_j\times b_{i,j} - \sum_{i=1}^{n}a_i\times c ...

  9. 剖析 Linux hypervisor--KVM 和 Lguest 简介

    慢慢弄清楚..   M. Tim Jones, 顾问工程师, Emulex Corp. M. Tim Jones 是一名嵌入式软件工程师,他是 Artificial Intelligence: A S ...

  10. apk签名《转》

    出处!:http://jeff-pluto-1874.iteye.com/blog/847366 我觉得写的不错就转载了. 一.Android Apk签名Apk签名首先要有一个keystore的签名用 ...