前言
现在的opencv+cuda可以实现很多操作,但是在图像操作中,hconcat,vconcat这两个操作却没有办法用cv::cuda::GpuMat操作实现,那么为了不在gpu操作过程中,硬生生转成cv::Mat,拼接之后再转回去,就需要新的方法来完成这一操作。
一、操作代码
代码如下:
cv::cuda::Stream stream_test;
cv::Mat A_mat;
cv::Mat B_mat;
cv::cuda::GpuMat A_cuda_mat;//你自己初始化或者从哪拿图我就不管了,但是要保证AB横宽一至或者高一至,如果你要横向或者纵向拼接
cv::cuda::GpuMat B_cuda_mat;//你自己初始化或者从哪拿图我就不管了,但是要保证AB横宽一至或者高一至,如果你要横向或者纵向拼接
cv::cuda::GpuMat get_AB_cuda_mat;
A_cuda_mat.upload(A_mat, stream_test);
B_cuda_mat.upload(B_mat, stream_test);
int a_w = A_cuda_mat.cols;
int b_w = B_cuda_mat.cols;
int a_h = A_cuda_mat.rows;
int b_h = B_cuda_mat.rows;
if(a_w = b_w)
{
get_AB_cuda_mat = cv::cuda::GpuMat(cv::Size(a_w, a_h + b_h), CV_8UC1, cv::Scalar(170));//格式或者颜色啥的自己定
A_cuda_mat.copyTo(get_AB_cuda_mat (cv::Rect(0, 0, a_w, a_h )), stream_test);
B_cuda_mat.copyTo(get_AB_cuda_mat (cv::Rect(0, a_h, a_w, b_h)), stream_test);
}
stream_test.waitForCompletion();
//以上是拿横宽一至,纵向拼接举例,横向拼接你们自己举一反三吧,代码是我在这里直接手打的,有错误可以说一下。
总结
以上就完成了在cv::cuda::GpuMat格式下的图像拼接操作。
另外,在cv::cuda之类的操作中,加上cv::cuda::Stream可以有效加速。