C++opencv4+cuda+图像直接拼接(横向、纵向拼接)的cv::cuda::GpuMat操作

文章目录

  • 前言
  • 一、操作代码
  • 总结


前言

现在的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可以有效加速。

你可能感兴趣的:(OpenCV相关,实用技巧,学习总结,c++,计算机视觉,opencv)