Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用opencv GPU旋转图像_C++_Opencv_Rotation_Gpu - Fatal编程技术网

C++ 使用opencv GPU旋转图像

C++ 使用opencv GPU旋转图像,c++,opencv,rotation,gpu,C++,Opencv,Rotation,Gpu,我正在使用opencv库来旋转图像 #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" ); /

我正在使用opencv库来旋转图像

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

}
#包括
#包括
#包括
#包括
int main()
{
cv::Mat im_in=cv::imread(“test.png”);
//将图像上载到GPU
cv::gpu::GpuMat gpu\im;
gpu im.upload(im_in);//RAM=>gpu
//从90开始旋转
cv::Size Size=im_in.Size();
cv::gpu::GpuMat gpu\u im\u rot;
cv::gpu::rotate(gpu\U im,gpu\U im\U rot,cv::Size(Size.height,Size.width),-90,Size.height-1,0,cv::INTER\u LINEAR);
下载(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 );

}
#包括
#包括
#包括“opencv2/objdetect.hpp”
#包括“opencv2/highgui.hpp”
#包括“opencv2/imgproc.hpp”
#包括“opencv2/cudaobjdetect.hpp”
#包括“opencv2/cudaimgproc.hpp”
#包括“opencv2/cudawarping.hpp”
#包括
#包括
使用名称空间std;
使用名称空间cv;
使用名称空间cv::cuda;
int main()
{
cv::Mat im_in=cv::imread(“test.png”);
//将图像上载到GPU
cv::cuda::GpuMat gpu\im;
gpu im.upload(im_in);//RAM=>gpu
//从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);
下载(im_-in);//gpu=>RAM
cv::imwrite(“out.png”,im_in);
}

为什么y-shift是这个:size.height-1,试试size.height。你确定黑线是因为旋转吗?这似乎是你的opencv版本中的一个错误。opencv 3.2.0运行良好。如果我使用size.height,我有水平和垂直黑线,我用opencv-4.1.1(Cuda编译工具,10.0版,V10.0.166)在nvidia jetson nano上进行了测试,但size.height-1是必需的。