Opencv贴图的两种方式
来源:互联网 发布:mbd.baidu.com短域名 编辑:程序博客网 时间:2024/06/05 08:18
白底不贴,遍历像素时,若为白色,则忽略,否则将像素值复制到背景上
因为目标图片中可能含有白色点,并且对抠出的图片要求挺高的不然就会出现第二幅图的效果,所以这种方式局限性较大。
void Drawtoback(Mat image, Mat background, int y, int x){ for (int i = 0; i < image.rows; i++) { for (int j = 0; j < image.cols; j++) { int a = image.at<Vec3b>(i, j)[2]; int b = image.at<Vec3b>(i, j)[1]; int c = image.at<Vec3b>(i, j)[0]; if (!(a == 255 && b == 255 && c == 255)) { <>background.at<Vec3b>(i + x, j + y)[2] = image.at<Vec3b>(i, j)[2]; <>background.at<Vec3b>(i + x, j + y)[1] = image.at<Vec3b>(i, j)[1]; <>background.at<Vec3b>(i + x, j + y)[0] = image.at<Vec3b>(i, j)[0]; } } }}
//透明底不贴,通过将图片保存为含有四通道的png格式,判断alpha值!=0,不贴透明底 void Drawtoback(Mat image, Mat background, int y, int x){ for (int i = 0; i < image.rows; i++) { for (int j = 0; j < image.cols; j++) { if (image.at<Vec4b>(i, j)[3] != 0) { background.at<Vec3b>(i + x, j + y)[2] = image.at<Vec4b>(i, j)[2]; background.at<Vec3b>(i + x, j + y)[1] = image.at<Vec4b>(i, j)[1]; background.at<Vec3b>(i + x, j + y)[0] = image.at<Vec4b>(i, j)[0]; } } }}
将一个目标物体贴在选定的背景上这里介绍两种方式,其实实质是相同的。用抠图软件将图像抠出,
第一种是将图像存于一张白底的背景上
第二种是透明背景的png格式
贴图之后的效果如下:
0 0
- Opencv贴图的两种方式
- opencv储存图像的两种方式
- opencv:提取样本的两种方式
- 两种贴图技术的比较
- unity3d 批量修改Texture属性 两种方式加载贴图
- Flex程序实现背景贴图的两种方式 Two ways to implement sexy background/border for containers
- Linux下opencv编译两种方式
- opencv之在Linux下编译opencv程序的两种方式g++、cmake
- OpenCV学习笔记(06):OpenCV色域转换的两种方式
- Opengl中位图贴图的三种方式
- Opengl中位图贴图的三种方式
- MFC 实现对话框 背景贴图的几种方式
- Android平台下使用OpenCV灰度化图片的两种方式
- Android Studio 2.2 使用 OpenCV 的两种方式(傻瓜式教程)
- OpenCV中局部贴图的方法
- 学习OpenCV系列文章二:视频播放(两种方式)
- unity混合两种贴图shader
- 两种“两数互换的方式”
- JVM基础(一):内存空间分配及其回收原理
- Java虚拟机(3)自动内存管理机制
- Django学习笔记第4、5记
- UVA10596欧拉回路加特判
- 软工视频总结
- Opencv贴图的两种方式
- input链接新页面
- 我的征途是星辰大海
- 建立高效人际关系的五大方法
- Military Phonetic Alphabet
- C文件
- c++ std::getline
- ccf+在于枚举时h的巧妙
- 从薪资800一路爬到月薪过万,全靠这6条