[英]Rotate image with opencv GPU
我正在使用gpu::rotate from 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 );
}
輸入圖像
輸出圖像
我一直都是黑線,我測試過多次平移坐標,和插值方法。
我在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 );
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.