OpenCV学习第十二篇:带透明通道图像合成(缩放,旋转,和ROI)
来源:互联网 发布:脸部去角质 知乎 编辑:程序博客网 时间:2024/06/07 15:55
第一步:获取素材图片
Mat src, dst; src = imread("F:/识图/底图.PNG", 1); dst = imread("logo", -1);
【ps:这里需要注意的是透明度图片获取,后面的参数带-1】
第二步:缩放Logo
Mat zoomPrint( Mat src,float zoom) { resize(src, src, Size(0, 0), zoom, zoom, INTER_LINEAR); return src;}
第三步:旋转Logo
//旋转void rotatePrint(Mat src, float angle) { Point center = Point(src.cols / 2, src.rows / 2); float scale = 1; Mat rot_mat = getRotationMatrix2D(center, angle, scale); warpAffine(src, src, rot_mat, src.size());}
第四步:合成两张图片
方法一:
void combineBehind(Mat src,Mat dst) { int rownumber = src.rows; int colnumber = src.cols; for (int i = 0; i < rownumber; i++) { for (int j = 0; j < colnumber; j++) { float alpha = src.at<Vec4b>(i, j)[3]; if (alpha <= 0) { src.at<Vec4b>(i, j)[0] = dst.at<Vec3b>(i, j)[0]; src.at<Vec4b>(i, j)[1] = dst.at<Vec3b>(i, j)[1]; src.at<Vec4b>(i, j)[2] = dst.at<Vec3b>(i, j)[2]; } } }}
【把透明度区域换为另外一张图】
方法二:
//平移印花int combinePrintReproduction(Mat &dst, Mat &scr, double scale){ if (dst.channels() != 3 || scr.channels() != 4) { return true; } if (scale < 0.01) return false; std::vector<cv::Mat>scr_channels; std::vector<cv::Mat>dstt_channels; split(scr, scr_channels); 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(255.0 / scale - scr_channels[3], scale / 255.0); dstt_channels[i] += scr_channels[i].mul(scr_channels[3], scale / 255.0); } merge(dstt_channels, dst); return true;}
【注意dst参数是一个ROI区域,这个方法可以合成可以保留alpha通道,而方法addWeighted不行】
欢迎留言,有问题可以私密我!或者加群《601408323》!
阅读全文
0 0
- OpenCV学习第十二篇:带透明通道图像合成(缩放,旋转,和ROI)
- OpenCV 图像旋转和缩放
- opencv中彩色图像通道分离、合成
- 带透明通道贴图旋转UV
- OpenCV学习笔记(四):ROI区域图像叠加和图像线性混合
- opencv学习笔记之旋转和缩放
- OpenCV图像旋转与缩放
- opencv学习笔记ROI区域和图像混合叠加
- OpenCV学习之图像的旋转与缩放
- OpenCV学习笔记(2)之图像通道分离和RGB三通道直方图显示
- OpenCV中文网站例程——图像旋转和缩放
- OpenCv-python之图像的缩放和旋转
- opencv学习(八)之ROI区域和图像混合叠加
- 学习opencv之(六)-图像切割,使用ROI
- 学习opencv之(六)-图像切割,使用ROI
- OpenCV学习笔记(03) :图像ROI以及线性混合
- 【Opencv学习(三)】获取Mat图像的ROI区域
- 学习opencv之(六)-图像切割,使用ROI
- vue开发中遇到的问题
- ROI Pooling
- 两种方法上传本地文件到github
- 第十一周 项目2
- mybatis一对多的查询方法详解
- OpenCV学习第十二篇:带透明通道图像合成(缩放,旋转,和ROI)
- WebSocket 在线测试
- java学习
- Oracle中跨服务器访问数据
- 第一次使用LoadRunner时遇到的问题
- 【开发笔记】C# MVC 后端执行Js并保留用户数据
- Makefile --使用变量
- Angular CLI简介2
- 移动硬盘位置不可用参数错误的解决方法