查看: 152|回复: 3

调用opencv某些函数,运行报错

[复制链接]

12

主题

50

帖子

156

积分

科员

Rank: 2

积分
156
发表于 2021-4-16 18:14:41 | 显示全部楼层 |阅读模式
HI 各位水友:
调用opencv的图像拼接
  1. cv::Stitcher* stitcher = cv::Stitcher::create(cv::Stitcher::SCANS);
  2.             cv::Stitcher::Status status = stitcher->stitch(imgs, pano);//拼接
复制代码
编译通过,运行报错: Illegal instruction (core dumped),这是什么原因,怎么解决呢?

回复

使用道具 举报

5

主题

118

帖子

253

积分

科长

Rank: 3Rank: 3

积分
253
发表于 2021-4-16 20:53:27 | 显示全部楼层
建议您可以在PC上面,在同样版本的opencv上运行相同的程序试试。

Jetson上安装的是Nvidia的tegra opencv,可以通过如下命令来确认版本。
dpgk -l | grep opencv
回复

使用道具 举报

12

主题

50

帖子

156

积分

科员

Rank: 2

积分
156
 楼主| 发表于 2021-4-18 09:02:08 | 显示全部楼层
Hcheng 发表于 2021-4-16 20:53
建议您可以在PC上面,在同样版本的opencv上运行相同的程序试试。

Jetson上安装的是Nvidia的tegra opencv, ...
  1. /*use raw data to get image*/
  2.         if (mvcam.GetImagePtr(outbuf, timestamp))
  3.         {
  4.             for (uint32_t i = 0; i < ctx.window_num; i++)
  5.             {
  6.                 if (imgFmt == "YUYV")
  7.                 {
  8.                     imgbuf[i] = cv::Mat(imgHeight, imgWidth, CV_8UC2, outbuf[i]);
  9.                     cv::Mat mrgba(imgHeight, imgWidth, CV_8UC3);
  10.                     cv::cvtColor(imgbuf[i], mrgba, cv::COLOR_YUV2BGR_YUYV);
  11.                     cv::Mat cb_final;
  12.                     undistort(mrgba, cb_final, cameraMatrix, distCoeffs);
  13.                 }
  14.                 else if (imgFmt == "ABGR32")
  15.                 {
  16.                     imgbuf[i] = cv::Mat(imgHeight, imgWidth, CV_8UC4, outbuf[i]);
  17.                     cv::cvtColor(imgbuf[i], imgbuf[i], cv::COLOR_RGBA2BGR);
  18.                     
  19.                     cv::Mat cb_final;
  20.                     std::cout << "camera Matrix is " << cameraMatrix << std::endl;
  21.                     std::cout << "distCoeffs is " << distCoeffs << std::endl;

  22.                     cv::Size image_size = imgbuf[i].size();
  23.                     cv::Mat mapx = cv::Mat(image_size, CV_32FC1);
  24.                         cv::Mat mapy = cv::Mat(image_size, CV_32FC1);
  25.                         cv::Mat R = cv::Mat::eye(3, 3, CV_32F);
  26.                     cv::fisheye::initUndistortRectifyMap(cameraMatrix, distCoeffs, R,
  27.                                     getOptimalNewCameraMatrix(cameraMatrix, distCoeffs, image_size, 1, image_size, 0), image_size, CV_32FC1, mapx, mapy);
  28.                     cv::remap(imgbuf[i], cb_final, mapx, mapy, cv::INTER_LINEAR);
  29.                     cv::imshow(windowName + std::to_string(i), cb_final);

  30.                     imgs.push_back(cb_final);
  31.                 }
  32.             }
  33.             //cv::Mat pano;
  34.             //cv::Stitcher* stitcher = cv::Stitcher::create(cv::Stitcher::SCANS);
  35.             //cv::Stitcher::Status status = stitcher->stitch(imgs, pano);//拼接
  36.             //cv::namedWindow("拼接",0);
  37.                 //cv::imshow("拼接",pano);
  38.             //    std::cout << "Timestamp from GetImagePtr  :  " << timestamp << std::endl;
  39.         }
复制代码

运行视频矫正还是正常的,执行到拼接就报错了。
回复

使用道具 举报

12

主题

50

帖子

156

积分

科员

Rank: 2

积分
156
 楼主| 发表于 2021-4-18 09:37:10 | 显示全部楼层
gdb调试信息
Thread 1 "cameras_opencv_" received signal SIGILL, Illegal instruction.
0x0000007fb7870cc8 in typeinfo name for cv::utils::AllocatorStatisticsInterface
    () from /usr/lib/aarch64-linux-gnu/libopencv_core.so.4.1

我感觉是程序运行在CPU还是GPU的设置有关。
我尝试调用AllocatorStatisticsInterface类里边的函数,编译报错提示没有这些函数,但是在OPENCV里边这些函数都是存在的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点我注册

本版积分规则


快速回复 返回顶部 返回列表