c++ - 使用opencv GPU旋转图像

标签 c++ opencv rotation gpu

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

#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 );

}

输入图像

enter image description here

输出图像

enter image description here

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

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

最佳答案

我使用 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 );

}

关于c++ - 使用opencv GPU旋转图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46731882/

相关文章:

c++ - 将 int 转换为 unsigned long long

c++ - 返回指向 const 对象的 const 共享指针的 const vector

iphone - Phonegap/Cordova 在 iPhone 上加载时将启动图像旋转 90 度

opencv - 单应矩阵分解为旋转矩阵和平移向量

ios - 防止一个 View Controller ios 7 自动旋转?

c++ - 为什么我不能让我的 CDatabase 对象理解我的数据源名称?

c++ - 好友名称注入(inject)问题

python - opencv - 将像素从 bgr 转换为 hsv

opencv - 带有opencv addexternal的cmake c++库

python-3.x - 如何使用OpenCV读取文件夹中的第一张图像(Python)