图像混合(前景+背景)【实例4】

我们可以将一些logo图案加在其他的图像上,这和图像的按比重加法的不同之处在于按比重加法是整体的加法,要求比较多,而在本节内容中,则主要是提取一些特征来实现加法,实用性更强,首先来对比一下这两者的差别。

图1 图像按比重混合(左)图像前景背景混合(右)

实现的过程(代码网上较多,本文就不附代码)

1. 获取前景图像的特征轮廓(logo部分)

将前景图像转为灰度图像,然后进行二值化(确保logo与背景在灰度图中像素值差异明显,提取的效果才会好)

img2gray=cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)#将图像转为灰度图
ret,mask=cv2.threshold(img2gray,242,255,cv2.THRESH_BINARY)#第二个参数为阈值,第三个参数为高于阈值取值结果,第四个是阈值方法

ret值存放的是阈值,m

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Halcon实现前景背景分离的简单示例: ```cpp #include <iostream> #include <string> #include <chrono> #include "HalconCpp.h" #include "HDevThread.h" using namespace HalconCpp; using namespace std; int main(int argc, char* argv[]) { // 读取图像 HImage image("test.jpg"); // 初始化背景模型 HTuple width, height; GetImageSize(image, &width, &height); HImage background("byte", width, height, 128); HRegion region("rectangle1", 0, 0, height-1, width-1); // 创建前景背景模型 HRegion foreground, background_region; HImage foreground_image, background_image; CreateBackgroundModel(image, &background, &foreground, &background_region, &foreground_image, &background_image); // 显示结果 OpenWindow(0, 0, width, height, 0, "原图"); HDevWindowStack::Push(0); DispObj(image, HDevWindowStack::GetActive()); OpenWindow(0, 0, width, height, 0, "前景背景分离"); HDevWindowStack::Push(0); SetColor(HDevWindowStack::GetActive(), "blue"); DispObj(background_region, HDevWindowStack::GetActive()); SetColor(HDevWindowStack::GetActive(), "red"); DispObj(foreground, HDevWindowStack::GetActive()); // 等待用户关闭窗口 cout << "按任意键退出..." << endl; GetChar(); return 0; } ``` 在这个例子中,我们首先从文件中加载图像,然后使用 `CreateBackgroundModel()` 函数创建前景背景模型。该函数需要传入图像背景模型、前景区域、背景区域和前景图像背景图像等参数。 我们还使用 `OpenWindow()` 和 `DispObj()` 函数在屏幕上显示原始图像前景背景分离的结果。最后,我们等待用户按下任意键,然后退出程序。 需要注意的是,该示例仅演示了如何使用 Halcon 实现前景背景分离,实际应用中可能需要更复杂的算法和技术来处理不同的场景和图像
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值