#include <stdio.h>
#include <tchar.h>
#include <cstdlib>
#include <iostream>
#include <sys/timeb.h>
#include <windows.h>
#include <ctime>
#include <climits>
#include <opencv2/opencv.hpp> //头文件
#include "../../inc/GxIAPI.h"
#include "../../inc/DxImageProc.h"
#pragma comment(lib, "../../lib/x86/DxImageProc.lib")
#pragma comment(lib, "../../lib/x86/GxIAPI.lib")
#include <Mmsystem.h>
#pragma comment(lib, "winmm.lib")
using namespace cv; //包含cv命名空间
using namespace std;
int i;
int flag=0;
GX_STATUS emStatus = GX_STATUS_SUCCESS;
GX_OPEN_PARAM openParam;
uint32_t nDeviceNum = 0;
//定时器
//VOID CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime);
//VOID CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime)
//{
// std::cout << "hello " << std::endl;
//}
void CALLBACK TimeProc(
UINT uID,
UINT uMsg,
DWORD dwUser,
DWORD dw1,
DWORD dw2
)
{
//cout<<"帧率:"<<i<<"帧率:"<<i<<"帧率:"<<i<<"帧率:"<<i<<"帧率:"<<i<<"帧率:"<<i<<"帧率:"<<i<<"帧率:"<<i<<endl;
cout<<"帧率:"<<i<<endl;
i=0;
}
//IplImage *g_pBinaryImage = NULL;
//IplImage *pSrcImage =NULL;
const char *pstrWindowsBinaryTitle = "二值图";
const char *pstrWindowsSrcTitle = "原图";
IplImage* src=NULL;
//IplImage* pContourImg = NULL;
CvMemStorage * storage = cvCreateMemStorage(0);
CvSeq *contour = 0, *contmax = 0;
int mode = CV_RETR_LIST;
//// 从文件中加载原图
//IplImage *pSrcImage = cvLoadImage("3.bmp", CV_LOAD_IMAGE_UNCHANGED);
IplImage * pSrcImage1 = cvCreateImage(cvSize(2592, 1944), 8, 1);
IplImage * pSrcImage2 = cvCreateImage(cvSize(2592, 1944), 8, 1);
IplImage * pSrcImage3 = cvCreateImage(cvSize(2592, 1944), 8, 1);
IplImage * pSrcImage4 = cvCreateImage(cvSize(2592, 1944), 8, 1);
// 为轮廓显示图像申请空间, 3通道图像,以便用彩色显示
IplImage* pContourImg1 = cvCreateImage(cvGetSize(pSrcImage1), IPL_DEPTH_8U, 3);
IplImage* pContourImg2 = cvCreateImage(cvGetSize(pSrcImage2), IPL_DEPTH_8U, 3);
IplImage* pContourImg3 = cvCreateImage(cvGetSize(pSrcImage3), IPL_DEPTH_8U, 3);
IplImage* pContourImg4 = cvCreateImage(cvGetSize(pSrcImage4), IPL_DEPTH_8U, 3);
// copy source image and convert it to BGR image
// 创建二值图
IplImage * g_pBinaryImage1 = cvCreateImage(cvGetSize(pSrcImage1), IPL_DEPTH_8U, 1);
IplImage * g_pBinaryImage2 = cvCreateImage(cvGetSize(pSrcImage2), IPL_DEPTH_8U, 1);
IplImage * g_pBinaryImage3 = cvCreateImage(cvGetSize(pSrcImage3), IPL_DEPTH_8U, 1);
IplImage * g_pBinaryImage4 = cvCreateImage(cvGetSize(pSrcImage4), IPL_DEPTH_8U, 1);
CvPoint2D32f center;
float radius;
GX_DEV_HANDLE m_hDevice[10]; ///< 设备句柄
BYTE *m_pBufferRaw[10]; ///< 原始图像数据
BYTE *m_pImageBuffer[10]; ///黑白转换后的图
BYTE *m_pBufferRGB[10]; ///< RGB图像数据,用于显示和保存bmp图像
int64_t m_nImageHeight[10]; ///< 原始图像高
int64_t m_nImageWidth[10]; ///< 原始图像宽
int64_t m_nPayLoadSize[10];
int64_t m_nPixelColorFilter[10]; ///< Bayer格式
Mat test;
//图像回调处理函数
static void GX_STDC OnFrameCallbackFun1(GX_FRAME_CALLBACK_PARAM* pFrame)
{
//PrepareForShowImg();
if (pFrame->status == 0)
{
//struct timeb startTime , endTime;
//ftime(&startTime);
//对图像进行某些操作
// memcpy(m_pBufferRaw, pFrame->pImgBuf, pFrame->nImgSize);
// pSrcImage->imageData = (char*)m_pBufferRaw;
pSrcImage1->imageData = (char*)(pFrame->pImgBuf);
cvCvtColor(pSrcImage1, pContourImg1, CV_GRAY2BGR);
// 转为二值图
cvThreshold(pSrcImage1, g_pBinaryImage1, 155, 255, CV_THRESH_BINARY);
// // 查找contour
// int nContours = cvFindContours( g_pBinaryImage1, storage, &contour, sizeof(CvContour),
// mode, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));
// // 将轮廓画出
// cvDrawContours(pContourImg1, contour, CV_RGB(255,0,0), CV_RGB(255, 0, 0),
// -1, 2, 8, cvPoint(0,0));
//
// cvMinEnclosingCircle(contour,¢er,&radius);
//// cout << "中心坐标:" << center.x<<" "<<center.y<< endl;
// CvPoint2D32f center;
// float radius;
// cvMinEnclosingCircle(contour,¢er,&radius);
// cvCircle(pContourImg1,cvPointFrom32f(center),cvRound(radius),CV_RGB(100,100,100));
Mat dst1;
resize(Mat(pContourImg1),dst1,Size(600,600));
imshow("dst1",dst1);
if(waitKey(20)==27)
flag=1;
}
return;
}
static void GX_STDC OnFrameCallbackFun2(GX_FRAME_CALLBACK_PARAM* pFrame)
{
//PrepareForShowImg();
if (pFrame->status == 0)
{
//struct timeb startTime , endTime;
//ftime(&startTime);
//对图像进行某些操作
// memcpy(m_pBufferRaw, pFrame->pImgBuf, pFrame->nImgSize);
// pSrcImage->imageData = (char*)m_pBufferRaw;
pSrcImage2->imageData = (char*)(pFrame->pImgBuf);
cvCvtColor(pSrcImage2, pContourImg2, CV_GRAY2BGR);
// 转为二值图
cvThreshold(pSrcImage2, g_pBinaryImage2, 155, 255, CV_THRESH_BINARY);
Mat dst2;
resize(Mat(pContourImg2),dst2,Size(600,600));
imshow("dst2",dst2);
if(waitKey(20)==27)
flag==1;
}
return;
}
static void GX_STDC OnFrameCallbackFun3(GX_FRAME_CALLBACK_PARAM* pFrame)
{
//PrepareForShowImg();
if (pFrame->status == 0)
{
//struct timeb startTime , endTime;
//ftime(&startTime);
//对图像进行某些操作
// memcpy(m_pBufferRaw, pFrame->pImgBuf, pFrame->nImgSize);
// pSrcImage->imageData = (char*)m_pBufferRaw;
pSrcImage3->imageData = (char*)(pFrame->pImgBuf);
cvCvtColor(pSrcImage3, pContourImg3, CV_GRAY2BGR);
// 转为二值图
cvThreshold(pSrcImage3, g_pBinaryImage3, 155, 255, CV_THRESH_BINARY);
Mat dst3;
resize(Mat(pContourImg3),dst3,Size(600,600));
imshow("dst3",dst3);
if(waitKey(20)==27)
flag=1;
}
return;
}
static void GX_STDC OnFrameCallbackFun4(GX_FRAME_CALLBACK_PARAM* pFrame)
{
//PrepareForShowImg();
if (pFrame->status == 0)
{
//struct timeb startTime , endTime;
//ftime(&startTime);
//对图像进行某些操作
// memcpy(m_pBufferRaw, pFrame->pImgBuf, pFrame->nImgSize);
// pSrcImage->imageData = (char*)m_pBufferRaw;
pSrcImage4->imageData = (char*)(pFrame->pImgBuf);
cvCvtColor(pSrcImage4, pContourImg4, CV_GRAY2BGR);
// 转为二值图
cvThreshold(pSrcImage4, g_pBinaryImage4, 155, 255, CV_THRESH_BINARY);
Mat dst4;
resize(Mat(pContourImg4),dst4,Size(600,600));
imshow("dst4",dst4);
if(waitKey(20)==27)
flag=1;
}
return;
}
int open_camera(int i)
{
openParam.accessMode = GX_ACCESS_EXCLUSIVE;
openParam.openMode = GX_OPEN_INDEX;
char name[10];
sprintf(name,"%d",i);
openParam.pszContent = name;//相机的序列号
// 初始化库
emStatus = GXInitLib();
if (emStatus != GX_STATUS_SUCCESS)
{
return 0;
}
// 枚举设备列表
emStatus = GXUpdateDeviceList(&nDeviceNum, 1000);
if ((emStatus != GX_STATUS_SUCCESS) || (nDeviceNum <= 0))
{
return 0;
}
//打开设备
emStatus = GXOpenDevice(&openParam, &m_hDevice[i]);
//设置采集模式连续采集
emStatus = GXSetEnum(m_hDevice[i], GX_ENUM_ACQUISITION_MODE, GX_ACQ_MODE_CONTINUOUS);
emStatus = GXSetInt(m_hDevice[i], GX_INT_ACQUISITION_SPEED_LEVEL, 1);
emStatus = GXSetEnum(m_hDevice[i], GX_ENUM_BALANCE_WHITE_AUTO, GX_BALANCE_WHITE_AUTO_CONTINUOUS);
bool bColorFliter = false;
// 获取图像大小
emStatus = GXGetInt(m_hDevice[i], GX_INT_PAYLOAD_SIZE, &m_nPayLoadSize[i]);
// 获取宽度
emStatus = GXGetInt(m_hDevice[i], GX_INT_WIDTH, &m_nImageWidth[i]);
// 获取高度
emStatus = GXGetInt(m_hDevice[i], GX_INT_HEIGHT, &m_nImageHeight[i]);
test.create(m_nImageHeight[i], m_nImageWidth[i], CV_8UC3);
cout<<"ok"<<endl;
//判断相机是否支持bayer格式
bool m_bColorFilter;
emStatus = GXIsImplemented(m_hDevice[i], GX_ENUM_PIXEL_COLOR_FILTER, &m_bColorFil
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论









收起资源包目录












































































共 63 条
- 1
资源评论

- weixin_393808152018-12-18还不错,但有语法错误
- weixin_418384002018-04-27还不错,但有语法错误

qq_35971623
- 粉丝: 46
- 资源: 2
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


会员权益专享
安全验证
文档复制为VIP权益,开通VIP直接复制
