实验 1 图像基本操作

1. 实验目的

①熟悉 Photoshop 基本操作;
②掌握 Matlab 、Python+OpenCV 中处理图像的基本方法;
③掌握图像的半调转换和抖动转换。

2. 实验内容

①Photoshop 基本操作:打开图像文件,选择区域,旋转、裁剪图像、图层操作;
②Matlab 、Python+OpenCV 基本操作:读入图像,改变图像尺寸,旋转、裁剪图像,计算图像的基本特征指标。
③使用 Matlab 完成图像的半调转换和抖动转换并显示结果。

3. 实验过程

3.1 Photoshop 图像基本操作

① 实验步骤(需详细介绍每一步实验步骤)
(1) 打开图像文件:

  • 首先打开Ps软件
  • 其次打开图片

在这里插入图片描述

(2) 选择区域:
在这里插入图片描述

在这里插入图片描述

(3) 裁剪图像:

在这里插入图片描述
按下Enter键

在这里插入图片描述
(4) 旋转图像:

在这里插入图片描述
可以选择选择180°等各类操作
(5) 图层操作:(包括图层的创建,复制,删除,锁定,合并,显示隐藏图层和更改图层顺序)
② 实验结果展示

3.2 Matlab 、Python+OpenCV 图像基本操作

3.2.1 Matlab 实现:
使用 Matlab 编写代码完成读入图像,改变图像尺寸,旋转、裁剪图像, 计算图像的基本特征指标等功能并展示结果。
①主要函数及其参数

请填写 以下Matlab 函数对应的参数说明:
imread(filename)读取名为 filename的图像
imfinfo (filename)获取图像名为 filename的各种信息
translate(SE, [y x])是一个用来进行平移操作的函数,其中SE表示待平移的对象或坐标系,[y x]表示平移向量,用于指定在y轴和x轴方向上的位移量。
imrotate(img,30)是一个用于图像旋转的函数。其中,img代表待旋转的图像,而30表示旋转的角度,以逆时针方向为正
imresize(img,a,‘method’)是一个用于对图像进行尺寸调整的函数。其中,img表示待调整尺寸的图像,a表示尺寸调整的比例或目标尺寸,而'method'表示所采用的调整方法
close()是一个用于关闭图形窗口的函数
subplot(m,n,p)是一个用于在图形窗口中创建子图的函数, subplot函数用于将图形窗口划分为一个m×n的网格,并在指定位置p上创建一个子图
rgb2gray(image)是一个用于将RGB图像转换为灰度图像的函数
imcomplement(image)是一个用于对图像进行反色处理的函数

② 实验代码展示

clear all;
clc;
% 读入图像
image = imread('D:\WorkSpace\matlab\lena.png');

% 显示原始图像
figure;
subplot(2, 3, 1);
imshow(image);
title('原始图像');

% 改变图像尺寸
resizedImage = imresize(image, 0.5);

% 显示改变尺寸后的图像
subplot(2, 3, 2);
imshow(resizedImage);
title('改变尺寸后的图像');

% 旋转图像
rotatedImage = imrotate(image, 45);

% 显示旋转后的图像
subplot(2, 3, 3);
imshow(rotatedImage);
title('旋转后的图像');

% 裁剪图像
croppedImage = image(50:200, 100:300, :);

% 显示裁剪后的图像
subplot(2, 3, 4);
imshow(croppedImage);
title('裁剪后的图像');

% 计算图像的基本特征指标
grayImage = rgb2gray(image);
meanValue = mean2(grayImage);
stdDeviation = std2(grayImage);
maxValue = max(grayImage(:));
minValue = min(grayImage(:));

% 显示图像的特征指标
subplot(2, 3, [5, 6]);
imshow(grayImage);
title('图像的灰度图');
text(10, 20, ['均值: ' num2str(meanValue)], 'Color', 'r');
text(10, 40, ['标准差: ' num2str(stdDeviation)], 'Color', 'r');
text(10, 60, ['最大值: ' num2str(maxValue)], 'Color', 'r');
text(10, 80, ['最小值: ' num2str(minValue)], 'Color', 'r');

③ 实验结果展示

在这里插入图片描述

3.2.2 Python+OpenCV 实现

使用 Python+OpenCV 库编写代码完成读入图像,改变图像尺寸,旋转、 裁剪图像,计算图像的基本特征指标等功能并展示结果。
① 主要函数及其参数
请填写以下函数对应的参数说明:

请填写 以下Matlab 函数对应的参数说明:
cv.imread(filename, [flags])是用来读取图像文件的。其中,filename是要读取的像文件的路径,flags是一个标志位参数。
cv2.rotate用于对图像进行旋转操作。根据引用,cv2.rotate有三个参数,分别是待旋转的图像(img),旋转方向(cv2.ROTATE_90_CLOCKWISE、cv2.ROTATE_180、cv2.ROTATE_90_COUNTERCLOCKWISE),以及旋转后的图像(rotate_90_cv、rotate_180_cv、rotate_270_cv)
cv2.resize是OpenCV库中用于调整图像大小的函数

② 实验代码展示

import cv2 as cv

# 读入图像
image = cv.imread('lena.png')

# 显示原始图像
cv.imshow('原始图像', image)
cv.waitKey(0)

# 改变图像尺寸
resized_image = cv.resize(image, (0, 0), fx=0.5, fy=0.5)

# 显示改变尺寸后的图像
cv.imshow('改变尺寸后的图像', resized_image)
cv.waitKey(0)

# 旋转图像
height, width = image.shape[:2]
rotation_matrix = cv.getRotationMatrix2D((width / 2, height / 2), 45, 1)
rotated_image = cv.warpAffine(image, rotation_matrix, (width, height))

# 显示旋转后的图像
cv.imshow('旋转后的图像', rotated_image)
cv.waitKey(0)

# 裁剪图像
cropped_image = image[50:200, 100:300]

# 显示裁剪后的图像
cv.imshow('裁剪后的图像', cropped_image)
cv.waitKey(0)

# 计算图像的基本特征指标
gray_image = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
mean_value = cv.mean(gray_image)[0]
standard_deviation = cv.meanStdDev(gray_image)[1][0][0]
min_value, max_value, _, _ = cv.minMaxLoc(gray_image)

# 显示图像的特征指标
cv.imshow('图像的灰度图', gray_image)
font = cv.FONT_HERSHEY_SIMPLEX
cv.putText(gray_image, f" {mean_value}", (10, 20), font, 0.6, (255, 255, 255), 1)
cv.putText(gray_image, f" {standard_deviation}", (10, 40), font, 0.6, (255, 255, 255), 1)
cv.putText(gray_image, f" {max_value}", (10, 60), font, 0.6, (255, 255, 255), 1)
cv.putText(gray_image, f" {min_value}", (10, 80), font, 0.6, (255, 255, 255), 1)
cv.imshow('图像的特征指标', gray_image)
cv.waitKey(0)

cv.destroyAllWindows()

③ 实验结果展示
原始图像

在这里插入图片描述

改变尺寸后的图像

在这里插入图片描述
旋转后的图像

在这里插入图片描述
裁剪后的图像
在这里插入图片描述
显示图像的特征信息
在这里插入图片描述

3.3 图像的半调转换和抖动转换。

3.3.1 图像的半调转换
使用 Matlab 编写代码并读取一张图像,完成4×4 的半调转换并显示原图和结果。
① 实验代码展示

% 读入图像
image = imread('lena.png');

% 显示原图像
figure;
subplot(1, 2, 1);
imshow(image);
title('原始图像');

% 获取图像大小和通道数
[height, width, ~] = size(image);

% 计算每个像素的阈值
threshold = 255 / 2;

% 进行4×4半调转换
for i = 1 : 4 : height
    for j = 1 : 4 : width
        block = image(i : i + 3, j : j + 3, :);
        gray_block = rgb2gray(block);
        binary_block = gray_block > threshold;
        block(:, :, 1) = uint8(binary_block) * 255;
        block(:, :, 2) = uint8(binary_block) * 255;
        block(:, :, 3) = uint8(binary_block) * 255;
        image(i : i + 3, j : j + 3, :) = block;
    end
end

% 显示半调转换后的图像
subplot(1, 2, 2);
imshow(image);
title('半调转换后的图像');

② 实验结果展示

在这里插入图片描述

3.3.2 图像的抖动转换

(1)调用 Matlab 中的抖动函数,dither 。观察原图和抖动转换后的结果。
① 实验代码展示

% 读入图像
image = imread('lena.png');

% 将图像转换为灰度图像
gray_image = rgb2gray(image);

% 显示原图像
figure;
subplot(1, 2, 1);
imshow(image);
title('原始图像');

% 进行抖动转换
dithered_image = dither(gray_image);

% 显示抖动转换后的图像
subplot(1, 2, 2);
imshow(dithered_image);
title('抖动转换后的图像');

② 实验结果展示

在这里插入图片描述

4. 实验小结

①在安装 Matlab 和 OpenCV 库时,你遇到了哪些问题,是如何解决的。
答:没有任何困难,按照网上教程傻瓜式安装即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/757467.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis 缓存预热、缓存雪崩、缓存击穿、缓存穿透业务实践

0、前言 本文所有代码可见 > 【gitee code demo】 本文会涉及 缓存预热、缓存雪崩、缓存击穿、缓存穿透介绍和解决方案业务实践 1、缓存预热 1.1、描述 提前将热点数据加载到缓存,提前响应,降低后端数据源访问压力 1.2、实践 Autowiredprivate R…

Perl入门学习

Perl是一种强大的脚本语言,以其灵活性和文本处理能力而闻名,常用于系统管理、Web开发、生物信息学以及数据处理等领域。以下是Perl语言入门学习的一些关键点: ### 1. Perl简介 - **起源与特点**:Perl由Larry Wall在1987年创建&am…

springboot+vue+mybatis奶茶管理系统+PPT+论文+讲解+售后

由于科学技术的快速发展,人们的生活也与信息时代的发展相关。同时,随着市场化和经济化的发展,国内很多行业已经意识到了这一点,为了提升行业的竞争力,就应当率先把握机会。于是在互联网的默化潜移影响下,餐…

ctfshow-web入门-命令执行(web56、web57、web58)

目录 1、web56 2、web57 3、web58 1、web56 命令执行&#xff0c;需要严格的过滤 新增过滤数字&#xff0c;只能采用上一题临时文件上传的方法&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><…

MySQL高级-事务-并发事务演示及隔离级别

文章目录 0、四种隔离级别1、创建表 account2、修改当前会话隔离级别为 read uncommitted2.1、会出现脏读 3、修改当前会话隔离级别为 read committed3.1、可以解决脏读3.2、会出现不可重复读 4、修改当前会话隔离级别为 repeatable read&#xff08;默认&#xff09;4.1、解决…

计算机网络之体系结构

上节内容&#xff1a;数据通信原理 1.计算机网络体系结构 体系结构: 研究系统中各组成成分及其关系的一门学科。 计算机网络体系结构: 定义和描述一组用于计算机及其通信设施之间互连的标准和规范的集合&#xff0c;遵循这组规范可以很方便地实现计算机设备之间的通信。 相互…

2024百度之星第一场-110串

补题链接&#xff1a; 码蹄集 三个状态转移的计数dp 先确定状态 n个数至多修改k次&#xff0c;保证不出现字串“110” 常规想法先把状态确定为dp[n][k][0/1]&#xff0c;前n个数&#xff0c;修改k次后&#xff0c;末尾数为0/1&#xff0c;不能转移再换思路。 初始状态设定如…

[Cloud Networking] BGP

1. AS (Autonomous System) 由于互联网规模庞大&#xff0c;所以网络会被分为许多 自治系统&#xff08;AS-Autonomous system&#xff09;。 所属类型ASN名称IPv4 数量IPv6数量运营商ISPAS3356LEVEL3 - Level 3 Parent, LLC, US29,798,83273,301,954,048互联网企业AS15169GO…

自适应IT互联网营销企业网站pbootcms模板

模板介绍 一款蓝色自适应IT互联网营销企业网站pbootcms模板&#xff0c;该模板采用响应式设计&#xff0c;可自适应手机端&#xff0c;适合一切网络技术公司、互联网IT行业&#xff0c;源码下载&#xff0c;为您提供了便捷哦。 模板截图 源码下载 自适应IT互联网营销企业网站…

【PyQt】20-QTimer(动态显示时间、定时关闭)

QTimer 前言一、QTimer介绍二、动态时间展示2.1 代码2.2 运行结果 三、定时关闭3.1 介绍他的两种用法1、使用函数或Lambda表达式2、带有定时器类型&#xff08;高级&#xff09; 3.2 代码3.3 运行结果 总结 前言 好久没学习了。 一、QTimer介绍 pyqt里面的多线程可以有两种实…

Windows系统开启自带虚拟机功能Hyper-V

前言 最近有小伙伴咨询&#xff1a;Windows系统上有自带的虚拟机软件吗&#xff1f; 答案肯定是有的。它就是Hyper-V&#xff0c;但很多小伙伴都不知道怎么打开这个功能。 今天小白就带大家来看看如何正确打开这个Windows自带的虚拟机功能Hyper-V。 开始之前&#xff0c;你…

统计分析利器:深入解读卡方检验与单因素方差分析的应用案例【练习题】

一、卡方检验 1.对400人进行问卷调查&#xff0c;询问对于教学改革的看法&#xff0c;调查结果如下表所示&#xff0c;请问不同学科不同性别的人意见是否相同。 学科 男生 女生 工科 80 40 理科 120 160 &#xff08;性别&#xff0c;学科均无序分类>卡方检验&am…

音视频开发32 FFmpeg 编码- 视频编码 h264 参数相关

1. ffmpeg -h 这个命令总不会忘记&#xff0c;用这个先将ffmpeg所有的help信息都list出来 C:\Users\Administrator>ffmpeg -h ffmpeg version 6.0-full_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developersbuilt with gcc 12.2.0 (Rev10, Built by MSYS2 pro…

万字长文详解数据结构:树 | 第6章 | Java版大话数据结构 | 二叉树 | 哈夫曼树 | 二叉树遍历 | 构造二叉树 | LeetCode练习

&#x1f4cc;本篇分享的大话数据结构中&#x1f384;树&#x1f384;这一章的知识点&#xff0c;在此基础上&#xff0c;增加了练习题帮助大家理解一些重要的概念✅&#xff1b;同时&#xff0c;由于原文使用的C语言代码&#xff0c;不利于学习Java语言的同学实践&#xff0c;…

JS(JavaScript)事件处理(事件绑定)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

ChatGPT新纪元:揭秘GPT-4o的多模态能力

GPT-4o登场 探索ChatGPT的多模态创新 今日凌晨&#xff0c;OpenAI向全球宣布了AI发展的新篇章——GPT-4o&#xff0c;每次OpenAI发布重大更新时&#xff0c;尽管令人兴奋&#xff0c;但也不免使众多初创公司的梦想破灭。 GPT-4o的命名中的“o”象征着“omni”——全能的代表。…

基于线调频小波变换的一维时间序列时频分析方法(MATLAB)

在机械故障诊断领域,振动信号的处理常采用以快速傅立叶变换为基础的相关分析、幅值分析、频谱分析等时域和频域分析方法。但经典的FFT存在固有缺点,即它虽然在频域范围内是完全局部化的,但是它不包含任何时域信息,因而不适于分析非平稳信号。近年来涌现的各种时频分析方法(短时…

ros1仿真导航机器人 hector_mapping gmapping

仅为学习记录和一些自己的思考&#xff0c;不具有参考意义。 1 hector_mapping 建图过程 &#xff08;1&#xff09;gazebo仿真 roslaunch why_simulation why_slam.launch <launch><!-- We resume the logic in empty_world.launch, changing only the name of t…

c++习题04-忙碌的工人

目录 一&#xff0c;问题 二&#xff0c;思路 1&#xff0c;图形 2&#xff0c;分析 3&#xff0c;伪代码 三&#xff0c;代码 一&#xff0c;问题 二&#xff0c;思路 1&#xff0c;图形 根据题目&#xff0c;绘制出来的图形如下&#x1f447; 之后再绘制甲经过楼梯…

面试-J.U.C包的梳理

1.J.U.C包的梳理 Java.Util.Concurrent包简称JUC (1)JUC整体架构图 (2)分析 Executor&#xff1a;线程执行器&#xff0c;任务执行和调度的框架。Tools下存在executor相关的executors类&#xff0c;用于创建executorservice&#xff0c;scheduleexecutorservice&#xff0c;…