数字图像实验一:图像合成
来源:互联网 发布:拍照赚钱软件 编辑:程序博客网 时间:2024/06/17 13:12
题目要求:
现有一张4通道透明图像a.png。
- 从其中提取出alpha通道并显示;
- 用alpha混合,为a.png替换一张新的背景(背景图自选);
问题一代码:
#include<iostream> #include<opencv2/core/core.hpp>#include<opencv2/highgui/highgui.hpp>using namespace cv;using namespace std;int main(){ Mat img = imread("a.png", -1); Mat mat(img.rows, img.cols, CV_8UC1); for (int i = 0; i < img.rows; ++i) { for (int j = 0; j < img.cols; ++j) { mat.at<uchar>(i, j) = img.at<Vec4b>(i, j)[3]; } } namedWindow("alpha通道"); imshow("alpha通道", mat); waitKey();}
结果如下图:
问题二代码:
#include<iostream> #include<opencv2/core/core.hpp>#include<opencv2/highgui/highgui.hpp>using namespace cv;using namespace std;int main(){ Mat img = imread("a.png", -1); Mat backimg = imread("B.png", -1); Mat mat(img.rows, img.cols, CV_8UC4); for (int i = 0; i < img.rows; ++i) { for (int j = 0; j < img.cols; ++j) { double temp = img.at<Vec4b>(i, j)[3] / 255.00; mat.at<Vec4b>(i, j)[0] = (1 - temp)*backimg.at<Vec4b>(i, j)[0] + temp*img.at<Vec4b>(i, j)[0]; mat.at<Vec4b>(i, j)[1] = (1 - temp)*backimg.at<Vec4b>(i, j)[1] + temp*img.at<Vec4b>(i, j)[1]; mat.at<Vec4b>(i, j)[2] = (1 - temp)*backimg.at<Vec4b>(i, j)[2] + temp*img.at<Vec4b>(i, j)[2]; mat.at<Vec4b>(i, j)[3] = (1 - temp)*backimg.at<Vec4b>(i, j)[3] + temp*img.at<Vec4b>(i, j)[3]; } } namedWindow("alpha合成"); imshow("alpha合成", mat); waitKey();}
所选背景B.png如下图:
合成后的图像如下:
我们会发现合成后的图像锯齿现象严重,这是我们将代码中的double temp = img.at<Vec4b>(i, j)[3] / 255
改为double temp = img.at<Vec4b>(i, j)[3] / 255.00
这样就可以消除锯齿了,效果图如下:
锯齿神奇的消失了!这就是数据类型选取的重要性,以后的实验中还会遇到类似的问题。
阅读全文
0 0
- 数字图像实验一:图像合成
- 数字图像处理实验(一)
- 数字图像处理实验一代码部分
- 【图像处理】数字图像处理软件(一)
- 【数字图像处理一】BMP图像的读取
- MATLAB数字图像处理(一)图像直方图
- 数字图像处理实验三 图像轮廓提取与边缘检测
- 图像合成
- 实验一 数字图像的输入、输出、显示、直方图统计
- 数字图像处理(一) matlab图像简单操作
- 数字图像处理之二维码图像提取算法(一)
- 数字图像处理笔记—图像复原(一)
- MATLAB数字图像处理(一)图像的基本操作
- 图像合成(一)--三角剖分
- Android6.0 图像合成过程详解(一) setUpHWComposer函数
- Android6.0 图像合成过程详解(一) setUpHWComposer函数
- 【python图像处理】两幅图像的合成一幅图像(blending two images)
- bmp数字图像处理实验
- PaddlePaddle, TensorFlow, MXNet, Caffe2 , PyTorch五大深度学习框架2017-10最新评测
- java Float 类型转 Long类型
- Codeforces Round #295 (Div. 2) B. Two Buttons
- 实验三 栈和队列的基本操作实现及其应用 (1)
- N! HDU 1042
- 数字图像实验一:图像合成
- 大数模板(高精度)
- hdu 1047 Integer Inquiry
- 多线程互斥锁访问算法(下)------Lamport算法(面包店算法)
- HUSTOJ(转发)
- hdu 1063 Exponentiation
- hdu 1002 A+B
- c++设计模式之桥接模式
- Go 编译sqlite3 遇到的问题 + 加快go IDE编译速度