【问题标题】:Rotate image with opencv GPU使用opencv GPU旋转图像
【发布时间】:2017-10-13 14:11:30
【问题描述】:

我正在使用来自 opencv lib 的gpu::rotate 来顺时针旋转图像。

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

int main()
{
    cv::Mat im_in = cv::imread( "test.png" );

    //upload image to GPU
    cv::gpu::GpuMat gpu_im ;

    gpu_im.upload( im_in ); // RAM => GPU

    //Rotate from 90
    cv::Size size = im_in.size();
    cv::gpu::GpuMat gpu_im_rot ;
    cv::gpu::rotate( gpu_im, gpu_im_rot, cv::Size( size.height, size.width ), -90, size.height-1, 0, cv::INTER_LINEAR  );

    gpu_im_rot.download(im_in); //GPU => RAM

    cv::imwrite( "out.png", im_in );

}

输入图像

输出图像

我一直是黑线,我测试了多个移位坐标,和插值方法。

在opencv源码opencv\modules\gpu\src\imgproc.cpp中找不到真正的cuda对应代码

【问题讨论】:

  • 为什么你的 y-shift 是这个:size.height-1,试试 size.height。
  • 你确定黑线是因为旋转吗?
  • 似乎是您的opencv版本中的错误。它在 opencv 3.2.0 上运行良好。
  • 如果我使用 size.height 我有水平和垂直的黑线

标签: c++ opencv rotation gpu


【解决方案1】:

我使用 cuda-10.0 构建了 opencv-3.4,以下代码在我的 ubuntu-16.04 系统上运行良好。

#include <iostream>
#include <iomanip>
#include "opencv2/objdetect.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/cudaobjdetect.hpp"
#include "opencv2/cudaimgproc.hpp"
#include "opencv2/cudawarping.hpp"
#include <opencv2/cudaarithm.hpp>
#include <stdio.h>

using namespace std;
using namespace cv;
using namespace cv::cuda;

int main()
{
    cv::Mat im_in = cv::imread( "test.png" );

    //upload image to GPU
    cv::cuda::GpuMat gpu_im ;

    gpu_im.upload( im_in ); // RAM => GPU

    //Rotate from 90
    cv::Size size = im_in.size();
    cv::cuda::GpuMat gpu_im_rot ;
    cv::cuda::rotate( gpu_im, gpu_im_rot, cv::Size( size.height, size.width ), -90, size.height-1, 0, cv::INTER_LINEAR  );

    gpu_im_rot.download(im_in); //GPU => RAM

    cv::imwrite( "out.png", im_in );

}

【讨论】:

  • 我在 nvidia jetson nano 上使用 opencv-4.1.1(Cuda 编译工具,版本 10.0,V10.0.166)进行了测试,但 size.height-1 是必需的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-03
  • 2020-03-17
  • 1970-01-01
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
  • 2011-10-24
相关资源
最近更新 更多