opencv - C++ opencv图像编辑

标签 opencv

我想提供小方 block 的中心坐标,即 (5,5)[小方 block 是 10x10] 放置在 20x20 大方 block 的 (8,8) 坐标上。 得到这个图像结果:

最佳答案

试试这个,虽然我没有测试它,所以如果它不起作用请评论,我会尝试修复它 =)

cv::Mat placeImageInImage(cv::Point center, cv::Mat src, cv::Mat dst_orig)
{
    cv::Mat dst = dst_orig.clone();

    cv::Rect targetRect = cv::Rect(center.x-src.cols/2, center.y-src.rows/2, src.cols, src.rows);

    cv::Rect srcRect = cv::Rect(0,0,src.cols, src.rows);
    cv::Rect dstRect = cv::Rect(0,0,dst.cols, dst.rows);

    cv::Rect roi = targetRect & dstRect;

    srcRect.width = roi.width;
    srcRect.height = roi.height;

    // didnt test, maybe swap the order:
    srcRect.x += roi.x - targetRect.x;
    srcRect.y += roi.y - targetRect.y;

    src(srcRect).copyTo(dst(roi));

    return dst;
}

使用此代码进行测试:

int main(int argc, char* argv[])
{
    cv::Mat input = cv::imread("C:/StackOverflow/Input/Lenna.png");

    cv::Mat input2;
    cv::resize(input, input2, cv::Size(256, 256));

    cv::Mat result = placeImageInImage(cv::Point(256, 256), input2, input);

    cv::imshow("input", input);
    cv::imshow("result", result);
    cv::waitKey(0);
    return 0;
}

我得到:

enter image description here

关于opencv - C++ opencv图像编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38873357/

相关文章:

opencv - 如何在 OpenCV 中将 GpuMat 转换为 CvMat?

opencv - 通过添加 R+G+B 将 3 个 channel 合并为 1 个

opencv - 带有 “no value”的OpenCV Pixel

java - 在 OS X 上设置 OpenCV Java 绑定(bind)

c++ - 将 openCV .dll 文件添加到 Netbeans C++ Qt 应用程序

opencv - CarRacing-v0 在健身房 : The screen is totally black when I run the environment

opencv - OpenCV中的定向边缘检测

c++ - std::vector 每次使用时都填充相同的数据

opencv - 不满意的链接错误 : Flink

python-3.x - jupyter notebook 中图像的交互式标注