OpenCV4 + XMake
This commit is contained in:
@@ -17,7 +17,6 @@ CameraWrapper::CameraWrapper(int exposure, int gain, int camera_mode, const std:
|
||||
mode(camera_mode),
|
||||
camera_cnts(2),
|
||||
camera_status(-1),
|
||||
iplImage(nullptr),
|
||||
rgb_buffer(nullptr),
|
||||
channel(3),
|
||||
gain(gain),
|
||||
@@ -27,9 +26,11 @@ CameraWrapper::CameraWrapper(int exposure, int gain, int camera_mode, const std:
|
||||
void cameraCallback(CameraHandle hCamera, BYTE *pFrameBuffer, tSdkFrameHead* pFrameHead,PVOID pContext){
|
||||
CameraWrapper *c = (CameraWrapper*)pContext;
|
||||
CameraImageProcess(hCamera, pFrameBuffer, c->rgb_buffer, pFrameHead);
|
||||
auto iplImage = cvCreateImageHeader(cvSize(pFrameHead->iWidth, pFrameHead->iHeight), IPL_DEPTH_8U, c->channel);
|
||||
cvSetData(iplImage, c->rgb_buffer, pFrameHead->iWidth * c->channel); //此处只是设置指针,无图像块数据拷贝,不需担心转换效率
|
||||
c->src_queue.push(cv::cvarrToMat(iplImage).clone());
|
||||
// 使用 cv::Mat 替代 IplImage
|
||||
cv::Mat img(pFrameHead->iHeight, pFrameHead->iWidth,
|
||||
c->channel == 3 ? CV_8UC3 : CV_8UC1,
|
||||
c->rgb_buffer, pFrameHead->iWidth * c->channel);
|
||||
c->src_queue.push(img.clone());
|
||||
}
|
||||
|
||||
bool CameraWrapper::init() {
|
||||
@@ -134,15 +135,9 @@ bool CameraWrapper::read(cv::Mat &src) {
|
||||
|
||||
bool CameraWrapper::readRaw(cv::Mat &src) {
|
||||
if (CameraGetImageBuffer(h_camera, &frame_info, &pby_buffer, 500) == CAMERA_STATUS_SUCCESS) {
|
||||
if (iplImage) {
|
||||
cvReleaseImageHeader(&iplImage);
|
||||
}
|
||||
|
||||
iplImage = cvCreateImageHeader(cvSize(frame_info.iWidth, frame_info.iHeight), IPL_DEPTH_8U, 1);
|
||||
|
||||
cvSetData(iplImage, pby_buffer, frame_info.iWidth); //此处只是设置指针,无图像块数据拷贝,不需担心转换效率
|
||||
|
||||
src = cv::cvarrToMat(iplImage).clone();
|
||||
// 使用 cv::Mat 替代 IplImage
|
||||
cv::Mat img(frame_info.iHeight, frame_info.iWidth, CV_8UC1, pby_buffer, frame_info.iWidth);
|
||||
src = img.clone();
|
||||
|
||||
//在成功调用CameraGetImageBuffer后,必须调用CameraReleaseImageBuffer来释放获得的buffer。
|
||||
//否则再次调用CameraGetImageBuffer时,程序将被挂起一直阻塞,直到其他线程中调用CameraReleaseImageBuffer来释放了buffer
|
||||
@@ -156,16 +151,13 @@ bool CameraWrapper::readRaw(cv::Mat &src) {
|
||||
}
|
||||
|
||||
bool CameraWrapper::readProcessed(cv::Mat &src) {
|
||||
// cerr << "Get-1" << endl;
|
||||
if (CameraGetImageBuffer(h_camera, &frame_info, &pby_buffer, 500) == CAMERA_STATUS_SUCCESS) {
|
||||
CameraImageProcess(h_camera, pby_buffer, rgb_buffer,
|
||||
&frame_info); // this function is super slow, better not to use it.
|
||||
if (iplImage) {
|
||||
cvReleaseImageHeader(&iplImage);
|
||||
}
|
||||
iplImage = cvCreateImageHeader(cvSize(frame_info.iWidth, frame_info.iHeight), IPL_DEPTH_8U, channel);
|
||||
cvSetData(iplImage, rgb_buffer, frame_info.iWidth * channel); //此处只是设置指针,无图像块数据拷贝,不需担心转换效率
|
||||
src = cv::cvarrToMat(iplImage).clone();
|
||||
// 使用 cv::Mat 替代 IplImage
|
||||
int mat_type = (channel == 3) ? CV_8UC3 : CV_8UC1;
|
||||
cv::Mat img(frame_info.iHeight, frame_info.iWidth, mat_type, rgb_buffer, frame_info.iWidth * channel);
|
||||
src = img.clone();
|
||||
//在成功调用CameraGetImageBuffer后,必须调用CameraReleaseImageBuffer来释放获得的buffer。
|
||||
//否则再次调用CameraGetImageBuffer时,程序将被挂起一直阻塞,直到其他线程中调用CameraReleaseImageBuffer来释放了buffer
|
||||
CameraReleaseImageBuffer(h_camera, pby_buffer);
|
||||
@@ -193,4 +185,4 @@ CameraWrapper::~CameraWrapper() {
|
||||
//注意,先反初始化后再free
|
||||
if (rgb_buffer != nullptr)
|
||||
free(rgb_buffer);
|
||||
}
|
||||
}
|
||||
@@ -6,12 +6,13 @@
|
||||
#include <log.h>
|
||||
#include <cstring>
|
||||
#include <map>
|
||||
#include <string>
|
||||
|
||||
bool show_armor_box = false;
|
||||
bool show_armor_box = true;
|
||||
bool show_armor_boxes = false;
|
||||
bool show_light_blobs = false;
|
||||
bool show_origin = false;
|
||||
bool run_with_camera = false;
|
||||
bool run_with_camera = true;
|
||||
bool save_video = false;
|
||||
bool wait_uart = false;
|
||||
bool save_labelled_boxes = false;
|
||||
|
||||
Reference in New Issue
Block a user