山东大学数字图像处理实验(一)

这篇具有很好参考价值的文章主要介绍了山东大学数字图像处理实验(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.实验一

1.1.实验过程中遇到和解决的问题

题目:加载并显示图像

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;

int main()
{
    Mat image = imread("D:\\cLion\\project\\image\\2.jpg");
    imshow("First image", image);
    waitKey(0);
}
  • imread函数原型为 imread(const string& filename, int flags=1)
    • 这里的 filename 需要的是图像的路径。该函数从文件中加载图像并返回一个矩阵,如果图像不能被读取,则返回一个空的矩阵
    • 这里介绍一下不同 flag 的效果
      • flag=-1:8位深度,原通道
      • flag=0:8位深度,单通道(读取出来是灰度图)
      • flag=1:8位深度,3通道(RGB)
      • flag=2:原深度,单通道
      • flag=3:原深度,3通道
      • flag=4:8位深度,3通道
  • waitkey()控制这 imshow(n) 的窗口持续时间,单位是 ms,图像显示窗口将在 n ms 后关闭
    • waitkey()waitkey(0) 都表示无限等待
    • 当等待时间内无任何操作时等待结束后返回-1。
    • 当等待时间内有输入字符时,则返回输入字符的ASCII码对应的十进制值
    • 如果waitKey处于一个循环中,里面的参数将显示视频读取的帧(显示视频时使用)

1.2.结果

山东大学数字图形处理实验,数字图像处理,c++,opencv,算法

2.实验二

题目:实现一个读取图像任意通道的函数

2.1.实验过程中遇到和解决的问题

#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<iostream>
using namespace std;
using namespace cv;

void getChannel(const uchar* input, int width, int height, int inStep, int inChannels, uchar* output, int outStep, int channelToGet){
    for (int y = 0; y < height; ++y, input += inStep, output += outStep){
        const uchar* px = input; // 二维数组中每个一维数组的起始地址
        for (int x = 0; x < width; ++x, px += inChannels)
            output[x] = px[channelToGet]; //一维数组访问元素
    }
}


int main()
{
    Mat image = imread("D:\\cLion\\project\\image\\2.jpg");
    Mat output_image(image.size(), CV_8UC1); // 将输出图像设置为单通道

    getChannel(image.data, image.cols, image.rows, image.step, image.channels(), output_image.data, output_image.step, 2);
    imshow("output", output_image);
    waitKey(0);
}
  • 这里需要注意的是,图像的 data 部分是一个二维数组,像通常的二维数组一样访问就好了
  • 将输出图像设置为单通道图像操作起来更方便
  • 每次都取输入和输出二维数组的起始地址(就是处理完一行后,将首地址加上 step
    • 每次都处理一行,按照访问一维数组的方式来进行赋值即可

2.2.结果

B通道:

山东大学数字图形处理实验,数字图像处理,c++,opencv,算法

G通道:

山东大学数字图形处理实验,数字图像处理,c++,opencv,算法

R通道:

山东大学数字图形处理实验,数字图像处理,c++,opencv,算法

3.实验三

题目:现有一张4通道透明图像 a.png

  • 从其中提取出 alpha 通道并显示
  • alpha 混合,为透明图像替换一张新的背景

3.1.实验过程中遇到和解决的问题

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;

int main()
{
    Mat imageA = imread("D:\\cLion\\project\\alpha.png", IMREAD_UNCHANGED); // 前景
    Mat imageB = imread("D:\\cLion\\project\\sdu01.png"); // 背景
    vector<Mat> mask_channels;
    float alpha = 1.0;
    // 分离通道
    split(imageA, mask_channels); // 分离出 RGBA 分别作为一个图像
    // 取出 alpha 通道
    Mat mask = mask_channels[3];
    imshow("alpha image", mask);
    waitKey(1000); // 看个三秒

    Mat mixImage(imageB.size(), CV_8UC3);
    for (int i = 0; i < imageB.rows; i++)
        for (int j = 0; j < imageB.cols; j++) {
            if (i < imageA.rows && j < imageA.cols && mask.at<uchar>(i, j))
                for(int k = 0; k < 3; k++) mixImage.at<Vec3b>(i, j)[k] = saturate_cast<uchar>(alpha * float(imageA.at<Vec4b>(i, j)[k]) + (1 - alpha) * float(imageB.at<Vec3b>(i, j)[k]));

            else mixImage.at<Vec3b>(i, j) = imageB.at<Vec3b>(i, j);
    }

    imshow("mixed image", mixImage);
    waitKey(0);
}
  • 首先读进四通道图像
    • imread()函数后面的参数是 -1 或者 IMREAD_UNCHANGED 时代表读入原通道,而 png 图像本身就是具有 alpha 通道的,所以加了这两个参数(这俩都行),就能够读入四通道图像(注意:jpg 图像是没有第四个通道的),这张作为前景图
    • 背景图是否读入四通道个人认为意义不大,因为合成时是将前景图嵌入到背景图中,所以三通道就可以了。
    • split 函数的功能是进行通道分离(其实实验二的通道分离就是这个函数)
    • 设置一个 alpha 合成参数,当然也可以根据图像的 alpha 通道值来确定
    • 遍历背景图,如果当前位置前景图存在,则将前景图与背景图融合
      • 注意,四通道图像访问要使用 Vec4b,三通道图像使用的是 Vec3b
      • saturate_cast 函数的功能是防止数据溢出(大于255时设置为255,小于0时设置为0)
      • 没有前景图的地方直接等于背景图像素就好了

3.2.结果

  • alpha image:

山东大学数字图形处理实验,数字图像处理,c++,opencv,算法

  • mixed image:

山东大学数字图形处理实验,数字图像处理,c++,opencv,算法文章来源地址https://www.toymoban.com/news/detail-735836.html

到了这里,关于山东大学数字图像处理实验(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 山东大学单片机原理与应用实验 3.4 矩阵键盘扫描实验

    目录   一、实验题目 二、实验要求 三、实验过程及结果记录 1. 在Proteus 环境下建立图1所示原理图,并将其保存为keyscan_self.DSN 文件。 2. 编写控制源程序,将其保存为keyscan_self.asm 或keyscan_self.c。 3. 将源程序添加到U1 中,并构造(build)该程序,将asm文件编译成hex文件,将可

    2024年02月05日
    浏览(52)
  • 山东大学计算机组成与设计实验四 移位器

    山东大学计算机组成与设计实验四移位器, 山东大学计算机组成与设计实验, 山东大学计算机组成与设计实验报告, 计算机组成原理实验报告, 山东大学计算机组成原理实验报告 本实验要求采用传送方式实现二进制数的移位电路。图4.4给出了可对四位二进制数实现左移1位(×

    2024年02月12日
    浏览(41)
  • 山东大学单片机原理与应用实验 3.8 ADC0808/9信号采集实验

    目录 一、实验题目 二、实验要求 三、实验过程及结果分析 四、实验流程图 五、实验源代码 3.8 ADC0808信号采集实验 1、画出实验的流程图 2、编写源程序并进行注释 3、记录实验过程 4、记录程序运行结果截图 利用LCD1602和AD0808实现简单的交流信号过零检测与频率分析。要求信

    2024年02月07日
    浏览(48)
  • 山东大学数据结构课设第一部分实验二——外排序

    题目要求: 应用输者树结构模拟实现外排序。 基本要求: 1. 设计并实现 最小输者树 结构 ADT , ADT 中应包括初始化、返回赢者,重构等基本操作。 2. 应用最小输者树设计实现外排序,外部排序中的生成最初归并串以及 K 路归并都应用最小输者树结构实现; 3. 验证你所实现

    2024年04月26日
    浏览(30)
  • 山东大学计算机组成与设计实验七 节拍脉冲发生器时序电路

    山东大学计算机组成与设计实验七 节拍脉冲发生器时序电路实验, 山东大学计算机组成与设计实验, 山东大学计算机组成与设计实验报告, 计算机组成原理实验报告, 山东大学计算机组成原理实验报告 掌握节拍脉冲发生器的设计方法,理解节拍脉冲发生器的工作原理。 连续节

    2023年04月15日
    浏览(70)
  • 山东大学单片机原理与应用实验 4.5 8255并行I/O扩展及交通信号灯控制实验

    目录 一、实验题目 二、实验要求 三、实验过程及结果分析 四、实验流程图 五、实验源代码 4.5 8255并行I/O扩展及交通信号灯控制实验 1、画出实验的流程图 2、编写源程序并进行注释 3、记录实验过程 4、记录程序运行结果截图 本实验利用 8255 实现可编程的并行 IO 扩展功能

    2024年02月05日
    浏览(79)
  • 数字图像处理实验——数字图像处理初步

    一、实验目的与要求 1.熟悉及掌握在MATLAB中能够处理哪些格式的图像; 2.熟练掌握在MATLAB中如何读取图像及图像的属性信息(大小、颜色、亮度(灰度)、宽度、高度等); 3.掌握如何在MATLAB中按照指定要求存储一副图像的方法; 4.了解图像的算术运算在数字图像中的初步应

    2024年02月04日
    浏览(54)
  • 数字图像处理:实验六 图像分割

    数据分割是由图像处理到图像分析的关键步骤,是图像识别和计算机视觉至关重要的预处理,图像分割后提取的目标可用于图像识别、特征提取,图像搜索等领域。图像分割的基本策略主要是基于图像灰度值的两个特性,即灰度的不连续性和灰度的相似性,因此图像分割方法

    2024年02月06日
    浏览(52)
  • 数字图像处理:实验三 图像增强

    图像增强是数字图像处理过程中常采用的一种方法。为了改善视觉效果或便于人和机器对图像的理解和分析,根据图像的特点或存在的问题采取的改善方法或加强特征的措施称为图像增强。图像增强处理是改变图像视觉效果的手段,增强后的图像便于对它的后续处理。图像增

    2024年02月04日
    浏览(50)
  • 数字图像处理实验四--图像变换

    (图像变换) 实验内容: 对图像lena、cameraman和face进行傅里叶变换,观察图像能量在频谱图中的分布情况。 利用Matlab生成下列图像,并对其进行旋转30度、90度和120度,然后对他们分别进行傅里叶变换。 对图像lena、cameraman和face用DCT变换进行图像压缩,舍掉的变换系数分别小

    2024年04月14日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包