最新从(大恒)工业相机读取图片_大恒相机 采用videocapture,2024年最新C C++架构师必备技术

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/videoio.hpp>//for camera
#include <opencv2/video.hpp>
#include <opencv2/imgPRoc//imgproc.hpp>
#include <opencv2/ml/ml.hpp>

#include “opencv2/imgproc/imgproc.hpp”
#include “opencv2/ml/ml.hpp”
#include <time.h>
#include
#include
#include
using namespace std;
using namespace cv;

//一般的情况是不支持使用命名空间的

int main(int argc, char ** argv)
{
char filename[1024];
if (argc == 1)
sprintf(filename, “%s”, “camera1.avi”);
if (argc == 2)
sprintf(filename, “%s”, “123”);

VideoCapture capture;
capture.open(0);
if (!capture.isOpened())
{
    cout << "Could not initialize capturing...\n" << endl;
    return -1;
}

//按时间格式命名
time_t now = time(nullprt);获取1970.1.1至当前秒数time_t
struct tm * timeinfo = localtime(&now); //创建TimeDate,并转化为当地时间,
                                        //struct tm * timeinfo = gmtime ( &currTime );   //创建TimeDate,并转化为GM时间,
char path[60];
strftime(path, 60, "%Y_%m_%d_%H_%M_%S", timeinfo);
char strPath[100];
sprintf(strPath, "%s.avi", path);//将创建文件的命令存入cmdchar中

                                 //保存为avi格式视频
Mat frame;
VideoWriter writer;
writer.open(strPath, CV_FOURCC('X', 'V', 'I', 'D'), 25, Size(640, 480), true);//Size(640, 480)//Size(frame.rows, frame.cols)//"cam.avi"

int n = 1;
while (true)
{
    capture >> frame;
    char* cstr = new char[120];

//  sprintf(cstr, "%s%d%s", "/home/caros/Documents/../", n++, ".jpg");

    sprintf(cstr, "%s%d%s", "/home/baidu/Doc/shipin_capture", n++, ".jpg");

    imwrite(cstr, frame);

    imshow("Video_Capture", frame);
    if (frame.empty())
    {
        break;
    }
    writer << frame;
    waitKey(3);

}

//return 0;

}



#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;

void main()
{
VideoCapture capture(0);
VideoWriter writer(“VideoTest.avi”, CV_FOURCC(‘M’, ‘J’, ‘P’, ‘G’), 25.0, Size(640, 480));

while (capture.isOpened())    
{    

Mat frame;

if ((frame.rows0)||(frame.cols0))
{
printf(“frame capture failed\n”);
system(“pause”);
exit(0);
}
capture >> frame;
writer << frame;
imshow(“video”, frame);
if (cvWaitKey(20) == 27)
{
break;
}
}
}



void MainWindow::OnFrameCallbackFun1(GX_FRAME_CALLBACK_PARAM* frame)
{
// qDebug() << “OnFrameCallbackFun1”;
if (frame->status != 0)
{
return;
}



MainWindow pf1 = (MainWindow)(frame->pUserParam);
pf1->m_frame_first = frame;

//QImage image_circle;
uchar *pSrc = nullptr;
int id = 0; //ID号
int image_width = 0; //图像的宽
int image_height = 0; //图像的高
int64_t bayer_layout = 0; //Bayer格式
void *result_image = nullptr; //显示图像指针
QImage *show_image = nullptr;
QString device_name = “”; //相机
QString display_fps = “”; //显示帧率

image_width = (int)(pf1->m_struct_camera[id].image_width);
image_height = (int)(pf1->m_struct_camera[id].image_height);
bayer_layout = pf1->m_struct_camera[id].bayer_layout;
result_image = pf1->m_struct_camera[id].result_image;
show_image = pf1->m_struct_camera[id].show_image;

/*对原始图像进行取校准,去除畸变:求畸变参数/
pf1->frame_size[id] = cv::Size(2048, 1536);
std::string params_file = “/home/caros/baidu/adu/valetparking/modules/conf/camera_params.yml”;
load_camera_params(params_file, pf1->params[id]);
pf1->mapx[id] = cv::Mat(pf1->frame_size[id], CV_32FC1);
pf1->mapy[id] = cv::Mat(pf1->frame_size[id], CV_32FC1);
cv::Mat R = cv::Mat::eye(3, 3, CV_32F);
initUndistortRectifyMap(pf1->params[id].cameraMatrix, pf1->params[id].distCoeffs, R, pf1->params[id].cameraMatrix,
pf1->frame_size[id], CV_32FC1, pf1->mapx[id], pf1->mapy[id]);

//若支持彩色,转换为RGB图像后输出
if (pf1->m_struct_camera[id].color_filter_flag)
{
//将Raw8图像转换为RGB图像以供显示
//DxRaw8toRGB24((char*)frame->pImgBuf, result_image, image_width, image_height, RAW2RGB_NEIGHBOUR,
// DX_PIXEL_COLOR_FILTER(bayer_layout), false);
DxRaw8toRGB24((char*)frame->pImgBuf, pf1->m_circle_image[id].data, image_width, image_height,
RAW2RGB_NEIGHBOUR, DX_PIXEL_COLOR_FILTER(bayer_layout), false);
cv::remap(pf1->m_circle_image[id], pf1->m_remap_image[id], pf1->mapx[id], pf1->mapy[id], CV_INTER_LINEAR);
// input_images , output_images , the_one_map ,the_second_map,

if (calibrate_flag == true)
{
    for (int i = 0; i < 13; i++)
    {
        cv::circle(pf1->m_remap_image[id],
                   cv::Point(pf1->m_remap_image[id].cols / 2, pf1->m_remap_image[id].rows * i / 12),
                   10, cv::Scalar(255, 255, 0), 3);
    }
    cv::circle(pf1->m_remap_image[id],
               cv::Point(pf1->m_remap_image[id].cols / 2, pf1->m_remap_image[id].rows / 2),
               10, cv::Scalar(255, 0, 0), 3);
}

if (record_flag[id] == true)
{
    qDebug() << "camera1 frameindex: " << frame_index[id]++;
    cv::imwrite(writer1, pf1->m_remap_image[id]);
    record_flag[id] = false;
}
pSrc = (uchar*)(pf1->m_remap_image[id].data);
pf1->m_qimage[id] = QImage(pSrc, pf1->m_remap_image[id].cols, pf1->m_remap_image[id].rows,
                         pf1->m_remap_image[id].step, QImage::Format_RGB888);
pf1->image[id] = &(pf1->m_qimage[id]);

}
else
{
DxRaw8toRGB24((char*)frame->pImgBuf, result_image, image_width, image_height,RAW2RGB_NEIGHBOUR,
DX_PIXEL_COLOR_FILTER(NONE),false);
}

device_name.sprintf(“相机: %s”, pf1->m_baseinfo[id].szDisplayName);
display_fps.sprintf(“序列号: %s 显示帧率: %.2f FPS”, pf1->m_baseinfo[id].szSN, pf1->m_struct_camera[id].fps);

{
pf1->m_child_window[id]->ShowImage(pf1->image[id], device_name, display_fps, pf1->m_view_flag);
}

if (pf1->m_display_flag[id] == true)
{
pf1->m_child_window[id]->setWindowTitle(device_name);
pf1->m_child_window[id]->update();
pf1->m_display_flag[id] = false;
}
pf1->UpdateUI();


}



#include “stdafx.h”
#include “camera.h”
#include
#include <opencv2/opencv.hpp>
using namespace cv;

GX_DEV_HANDLE hDevice = nullptr;
static int keycode;

MERCamera::MERCamera()
{
GX_STATUS status = GX_STATUS_SUCCESS;
int64_t nValue = nullptr;

GXInitLib();
status = GXOpenDeviceByIndex(1, &hDevice);
if(status != GX_STATUS_SUCCESS)
{
		std::cout<<"open error"<<std::endl;
		return;
}

}

MERCamera::~MERCamera()
{
GX_STATUS emStatus = GX_STATUS_SUCCESS;
if(m_bIsSnaping)
{
EndContinuesMode();
}

emStatus = GXCloseDevice(hDevice);
if(emStatus != GX_STATUS_SUCCESS)
{ 
	std::cout<<"close error"<<std::endl;
} 

//关闭设备库
emStatus = GXCloseLib();
if(emStatus != GX_STATUS_SUCCESS)
{ 
	std::cout<<"close lib error"<<std::endl;
} 

}

void MERCamera::InitCamera()
{
GX_STATUS status = GX_STATUS_SUCCESS;
int64_t nValue = nullptr;

m_bIsSnaping = false;
status = GXGetEnum(hDevice, GX_ENUM_PIXEL_FORMAT, &m_nPixelFomat);
//获取宽度(需在停止采集状态下设置)
status = GXGetInt(hDevice, GX_INT_WIDTH, &nValue);
m_nImageWidth = (int)nValue;

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

15876341049)]
[外链图片转存中…(img-5aVkM2Xj-1715876341049)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值