当前位置:   article > 正文

OpenCV C/C++实现图像拼接(opencv 贴小图到大图)_将一个png图像的透明通道粘贴到另一张图像的局部,使用c++中的opencv

将一个png图像的透明通道粘贴到另一张图像的局部,使用c++中的opencv

利用 OpenCV 实现将多张小图拼接成一张大图,并支持小图放任意位置。

代码如下:

    cv::Mat srcImage = cv::imread("test_kele.png", cv::ImreadModes::IMREAD_UNCHANGED);
    cv::Mat outputImage = cv::Mat::zeros(480, 320, srcImage.type());

    printf("rows = %d, cols = %d, srcImage.type() = %d\n",
           srcImage.rows, srcImage.cols, srcImage.type());

    // 选定第一帧图要放的位置:0, 0, width, height
    CvRect rect = cvRect(0, 0, srcImage.cols, srcImage.rows);
    // 从要输出的大图中,获取第一张图要放的位置区域的引用
    cv::Mat dstMat = outputImage(rect);
    // 将原始图拷贝至目标区域
    srcImage.colRange(0, srcImage.cols).copyTo(dstMat);

    // 第二张图
    rect = cvRect(srcImage.cols, 0, srcImage.cols, srcImage.rows);
    dstMat = outputImage(rect);
    srcImage.colRange(0, srcImage.cols).copyTo(dstMat);

    // 第三张图
    rect = cvRect(2 * srcImage.cols, 100, srcImage.cols, srcImage.rows);
    dstMat = outputImage(rect);
    srcImage.colRange(0, srcImage.cols).copyTo(dstMat);

    // 将拼接后的图像写入文件
    cv::imwrite("test_out.png", outputImage);

    // 显示图像
    cv::imshow("Alan", outputImage);
    cv::waitKey(10 * 1000);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

效果图如下:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/81375
推荐阅读
相关标签
  

闽ICP备14008679号