网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事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;
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
15876341049)]
[外链图片转存中…(img-5aVkM2Xj-1715876341049)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!