计算机视觉 实验一 opencv 课程实验(显示,合成)

山东大学 计算机视觉 实验

实验1-1:图像显示

实验要求:
1)利用图像库的功能,实现从文件加载图像,并在窗口中进行显示的功能;
2)利用常见的图像文件格式(.jpg; .png; .bmp; .gif)进行测试。

实验1-2:图像合成

实验要求:
1)现有一张4通道透明图像a.png:
2)从其中提取出alpha通道并显示;
3)用alpha混合,为a.png替换一张新的背景(bg.png)。

实验要求

实验核心内容不允许使用库函数。

额外说明:仅提供 OpenCV C++ 实现

1、从文件加载图像,并在窗口中进行显示

除 GIF 外的打开方式:
	Mat src = imread(YOUR_PATH + "1.png");
    namedWindow("w");
    imshow("w", src);
    waitkey(0);
GIF 的打开方式参见 OpenCV打开GIF

2、图像合成

#define winname1_1 "Experiment 1-1"
#define winname1_2 "Experiment 1-2"
#define winname2_1 "Experiment 2-1"
#define winname2_2 "Experiment 2-2"

const String IMG_DIR = "你的路径";

void show_alpha_and_merge() {
    Mat alpha_img = imread(IMG_DIR + "a.png", IMREAD_UNCHANGED);
    // 注意! a.png 是四通道图片!
    assert(alpha_img.channels() == 4);

    vector<Mat> mask_channels;
    // 分离通道
    split(alpha_img, mask_channels);
    // 取出 alpha 通道
    Mat mask = mask_channels[3];
  
  	// 显示。3 秒看看
    namedWindow(winname1_2);
    imshow(winname1_2, mask);
    waitKey(3000);
    
    // 读取背景
    Mat bg = imread(IMG_DIR + "bg.png");
    Vec4b t;
    // 使用库函数 copyTo(bg, mask) 直接可以完成下面的内容,但是不可以用库函数
    // 思路:如果某点,mask 的 alpha 不为空,则用 alpha_img 的该点去代替
    // 注意 图像通道数不同
    for (int i = 0; i < bg.rows; i++) {
        for (int j = 0; j < bg.cols; j++) {
            if (mask.at<uchar>(i, j)) {
                t = alpha_img.at<Vec4b>(i, j);
                bg.at<Vec3b>(i, j) = Vec3b(t[0], t[1], t[2]);;
            }
        }
    }
    
    imshow(winname1_2, bg);
    waitKey(0);
}


  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值