opencv的gpu模块测试代码

官网上gpu模块使用例子
#include <iostream>
#include "opencv2/opencv.hpp"
#include "opencv2/gpu/gpu.hpp"

int main (int argc, char* argv[])
{
    try
    {
        cv::Mat src_host = cv::imread("file.png",CV_LOAD_IMAGE_GRAYSCALE);
        cv::gpu::GpuMat dst, src;
        src.upload(src_host);

        cv::gpu::threshold(src, dst, 128.0, 255.0,CV_THRESH_BINARY);

        cv::Mat result_host = dst;
        cv::imshow("Result", result_host);
        cv::waitKey();
    }
    catch(constcv::Exception& ex)
    {
        std::cout <<"Error: " << ex.what()<< std::endl;
    }
    return 0;
}

-------------------------------------------------------------------------------
官网的模板匹配使用例子
#include <iostream>
#include <string.h>
#include <algorithm>//max_element and min_element
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <cstdio>
#include <ctime>
#include <time.h>

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

#include<cuda_runtime_api.h>
//#include <cuda.h>
//#include "/usr/local/cuda/include/cuda_runtime_api.h"


using namespace std;
using namespace cv;


int main( int argc, char** argv )
{
Mat scene = imread ( "scene.jpg",1);
Mat templ = imread ( "template.jpg",1);
//Split to 1 channel
vector<Mat> rgbImg(3);
split(scene, rgbImg);
Mat scene1chan=rgbImg[0];
vector<Mat> rgbImg2(3);
split(templ, rgbImg2);
Mat templ1chan=rgbImg2[0];
//Upload to GPU mem
gpu::GpuMat gpu_scene, gpu_templ;
gpu_scene.upload(scene1chan);
gpu_templ.upload(templ1chan);
double minVal; double maxVal; Point minLoc; PointmaxLoc;
gpu::GpuMat gpu_result;
gpu_result.create(gpu_scene.rows-gpu_templ.rows+1 ,gpu_scene.cols-gpu_templ.cols+1 , CV_32F);
gpu::matchTemplate(gpu_scene, gpu_templ,gpu_result,CV_TM_SQDIFF);
gpu::minMaxLoc(gpu_result, &minVal,&maxVal, &minLoc,&maxLoc );
Mat result=gpu_result;
namedWindow("result", 0);
imshow( "result", result );
waitKey(0);
return(0);
}
--------------------------------------------------------------------------------------
迭代的是人,递归的是神这个作者的
#include <iostream>
#include "cvconfig.h"
#include "opencv2/core/core.hpp"
#include "opencv2/gpu/gpu.hpp"
#include "opencv2/core/internal.hpp" // For TBB wrappers

using namespace std;
using namespace cv;
using namespace cv::gpu;

struct Worker { void operator()(int device_id) const; };

int main()
{
    int num_devices =getCudaEnabledDeviceCoun t();
    if (num_devices< 2)
    {
        std::cout << "Twoor more GPUs are required\n";
        return -1;
    }
    for (int i = 0; i< num_devices; ++i)
    {
        DeviceInfo dev_info(i);
        if (!dev_info.isCompatible())
        {
            std::cout<< "GPU module isn't built for GPU #"<< i <<" ("
                  << dev_info.name()<< ", CC "<< dev_info.majorVersion()
                  <<dev_info.minorVersion() <<"\n";
            return-1;
        }
    }

    // Execute calculationin two threads using two GPUs
    int devices[] = {0,1};
    parallel_do(devices,devices + 2, Worker());

    return 0;
}


void Worker::operator()(int device_id) const
{
    setDevice(device_id);

    Mat src(1000, 1000,CV_32F);
    Mat dst;

    RNG rng(0);
    rng.fill(src,RNG::UNIFORM, 0, 1);

    // CPU works
    transpose(src,dst);

    // GPU works
    GpuMat d_src(src);
    GpuMat d_dst;
    transpose(d_src,d_dst);

    // Check results
    bool passed = norm(dst -Mat(d_dst), NORM_INF) < 1e-3;
    std::cout<< "GPU #"<< device_id<< " ("<< DeviceInfo().name()<< "): "
        << (passed ?"passed" : "FAILED") << endl;

    // Deallocate data here,otherwise deallocation will be performed
    // after context isextracted from the stack
    d_src.release();
    d_dst.release();
}
-----------------------------------------------------------------------------------------------

下面的有问题,得加using namespace std; usingnamespace cv;  usingnamespace cv::gpu; 

 

#include<iostream>

#include"opencv2\gpu\gpu.hpp" 

#include"opencv2\opencv.hpp"

int main() 

   try 

   

      cout<< getCudaEnabledDeviceCount(); 

   

   catch(const cv::Exception&ex) 

   

       cout<< "Error:"<< ex.what()<<endl; 

   }

   system("PAUSE"); 

    return0; 

}




**************************************************************
都有问题,cv::Mat可以转化为GpuMat
  cv::Mat src_host = cv::imread("lena.jpg",CV_LOAD_IMAGE_GRAYSCALE);
        cv::gpu::GpuMat dst, src;
        src.upload(src_host);
GpuMat也可以转为Mat    cv::Matresult_host =   cv::Mat(dst);





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zlingh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值