Opencv for unity图片合成
来源:互联网 发布:linux批量ping的命令 编辑:程序博客网 时间:2024/05/16 16:51
项目中需要合成图片,然网上各种方法不好使,于是在Opencv for unity插件论坛爬呀爬,熬夜找到了方法,还在困扰的猿们可以试试,代码中cvAdd4cMat_q()方法是关键。
注意Imgproc.cvtColor(bgmat, bgmat, Imgproc.COLOR_BGR2RGB);转换通道,因为Imgcodecs.imread()方法读取的Mat数据结构中存储为BGR排列。
老规矩,先看效果图:
1人像图,四周是全透明的
2背景图:
3合成图:
上代码:
void Start() { GetComponent<RawImage>().texture = MatMerg(); } Texture2D MatMerg() { Mat bgmat = Imgcodecs.imread(Application.streamingAssetsPath + "/bg.png", Imgcodecs.CV_LOAD_IMAGE_UNCHANGED); Mat qj = Imgcodecs.imread(Application.streamingAssetsPath + "/qj.png", Imgcodecs.CV_LOAD_IMAGE_UNCHANGED); Imgproc.cvtColor(bgmat, bgmat, Imgproc.COLOR_BGR2RGB); Imgproc.cvtColor(qj, qj, Imgproc.COLOR_BGRA2RGBA); Mat bgmat_roi = new Mat(bgmat, new OpenCVForUnity.Rect(797, 269, qj.cols(), qj.rows())); cvAdd4cMat_q(bgmat_roi, qj, 1.0); Texture2D texture = new Texture2D(bgmat.cols(), bgmat.rows(), TextureFormat.RGBA32, false); Utils.matToTexture2D(bgmat, texture); return texture; } private bool cvAdd4cMat_q(Mat dst, Mat scr, double scale) { if (dst.channels() != 3 || scr.channels() != 4) { return true; } if (scale < 0.01) return false; List<Mat> scr_channels = new List<Mat>(); List<Mat> dstt_channels = new List<Mat>(); Core.split(scr, scr_channels); Core.split(dst, dstt_channels); // CV_Assert(scr_channels.size() == 4 && dstt_channels.size() == 3); if (scale < 1) { scr_channels[3] *= scale; scale = 1; } for (int i = 0; i < 3; i++) { dstt_channels[i] = dstt_channels[i].mul(new Mat(scr_channels[3].size(), CvType.CV_8UC1, new Scalar(255.0 / scale)) - scr_channels[3], scale / 255.0); dstt_channels[i] += scr_channels[i].mul(scr_channels[3], scale / 255.0); } Core.merge(dstt_channels, dst); return true; }
阅读全文
0 0
- Opencv for unity图片合成
- unity截取图片并合成
- opencv图片序列合成视频
- opencv程序十六:图片合成
- 使用OpenCV合成两张图片
- OPENCV jpg图片合成avi视屏
- OpenCV将连续图片合成视频AVI
- Unity UGUI 多张图片合成一张 记时 显示ICO
- opencv 将图片合成为视频流(AVI格式)
- opencv 多组图片 合成视频动画avi
- opencv 将图片合成为视频流(AVI格式)
- opencv——利用图像金字塔合成图片
- 合成图片
- 合成图片
- 图片合成
- 图片合成
- 合成图片
- Opencv for Unity去除离散区域
- 链表翻转(给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5)
- AtomicInteger简介
- filebeat
- 关于iOS 键盘只能输入字母和数字
- mysql 1045 错误
- Opencv for unity图片合成
- PAT 1057数零壹
- 浅论中间件
- Mapper.xml文件详解
- iOS ReactiveCocoa 使用详解(二)
- 4G LTE各band对应的频率一览表
- PatchMatch Stereo(二):Gipuma
- Linux 多版本php切换
- RedHat如何关闭防火墙