c++ - cv::Mat 回退到 std::vector 问题
问题描述
目标是从 basler 相机(带有 pylon)读取图像到 opencv 矩阵,并std::vector
使用该方法将其加载到容器中push_back()
。我的尝试失败了,因为所有保存的元素都将是最后一个。所以如果我推回 295 元素,所有 295 图像将是相同的(最后一个)。我会写一个摘要代码:
try
{
auto TestCam1 = interfaces::Basler::ICamera_Basler_USB3("21993673", true);
interfaces::ICamera* Camera1 = TestCam1.getCamera(); //We can use Basler_USB3 as an ICamera
Camera1->open();
cout << "Cam1 opened" << endl;
static_cast<ICamera_Basler_USB3*>(Camera1)->Set_Sensor_Pixel_Format("BayerBG12");
static_cast<ICamera_Basler_USB3*>(Camera1)->Set_Width(500);
static_cast<ICamera_Basler_USB3*>(Camera1)->Set_Height(500);
static_cast<ICamera_Basler_USB3*>(Camera1)->Set_Exposure_Auto(false);
static_cast<ICamera_Basler_USB3*>(Camera1)->Set_Exposure(exp_val);
static_cast<ICamera_Basler_USB3*>(Camera1)->Set_Enable_Acquisition_Frame_Rate(true);
static_cast<ICamera_Basler_USB3*>(Camera1)->Set_Acquisition_Frame_Rate(20);
unsigned int cam_width=static_cast<ICamera_Basler_USB3*>(Camera1)->Get_Width();
unsigned int cam_height=static_cast<ICamera_Basler_USB3*>(Camera1)->Get_Height();
cv::Mat cv_img1(cam_width, cam_height, CV_16UC3);
std::vector<cv::Mat> video;
bool first_run = true;
Camera1->initGrabStream();
while(1){
cv_img1=Camera1->getLastFrameStream(); //give back frame_time and frame_num
video.push_back(cv_img1);
std::cout << "Buffer size: " << video.size() << std::endl;
if (video.size() == 295 && first_run == true)
{
funtionToEvaluateRecordedVideo(video);
first_run = false;
video.erase(video.begin(), video.end());
}
else if (video.size() == 40 && first_run == false)
{
funtionToEvaluateRecordedVideo(video);
video.erase(video.begin(), video.end());
}
// Here the interesting thing (and my problem) is that BOTH
// window shows the same image!
cv::imshow("Camera disp", video[video.size()-1]*15);
cv::imshow("Debug, buffer img1", video[0]*15);
if(waitKey(1) > 0)
{
Camera1->close();
break;
}
}
Camera1->Stop_Recording();
}
catch (GenICam::GenericException &e)
{
// Error handling.
cerr << "An exception occurred." << endl
<< e.GetDescription() << endl;
exitCode = 1;
}
总结问题:当前帧(从相机获得)推回到容器的末尾std::vector
。由于某种原因,容器向量的所有元素都将是相同的,并且是最后一个。
解决方案
推荐阅读
- c++ - 具有虚拟和非虚拟析构函数的删除运算符的不同行为
- django - 如何将 Python 中的 sqlite3 版本从 3.7.17 升级到 > 3.8
- php - 在管理新产品页面中默认将产品类型设置为“变量”
- typescript - 详细列表过滤器办公室ui面料
- sql - 编译时出错,PLS-00103,遇到符号“(”,预期如下:;
- openapi-generator - 是否可以在 Openapi 代码生成中排除路径?
- c - 如何使用 while 和 putchar 输出 char 数组
- scala - 在 Scala 中声明 var 不是 null 或 None
- javascript - 如何在我的字符串长度计数中包含非 spintax 内容?
- python - 在日期列的选择性时间段中添加 1 天