实验 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 : heightfor j = 1 : 4 : widthblock = 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 库时,你遇到了哪些问题,是如何解决的。
答:没有任何困难,按照网上教程傻瓜式安装即可。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

os实训课程模拟考试(大题复习)

目录 一、Linux操作系统 (1)第1关:Linux初体验 (2)第2关:Linux常用命令 (3)第3关:Linux 查询命令帮助语句 二、Linux之进程管理—(重点) &…

青岛网站建设一般多少钱

青岛网站建设的价格一般会根据网站的规模、功能、设计风格等因素来定,价格会存在着一定的差异。一般来说,一个简单的网站建设可能在数千元到一万元之间,而一个复杂的大型网站建设可能会需要数万元到数十万元不等。所以在选择网站建设服务时&a…

大模型RAG、ROG、RCG概念科普

大模型相关目录 大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步,扬帆起航。 大模型应用向开发路径:AI代理工作流大模型应用开发实用开源项目汇总大模…

LeetCode.76 最小覆盖子串

问题描述 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 注意: 对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字…

[Cloud Networking] BGP

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

java接口自动化测试,怎样可以快速入门?

从0到1,快速入门Java接口自动化测试 Java接口自动化测试是一种自动化测试的方式,通过模拟用户发送HTTP请求并验证返回结果,来测试接口的正确性。它可以大大提高测试效率和覆盖率,减少人工测试的工作量。本文将从零开始&#xff0…

SaaS系统中的数据库设计探讨

在SaaS(Software as a Service)系统中,数据库设计是确保数据安全性、隔离性和高效访问的重要环节。SaaS应用通常需要处理多个租户的数据,每个租户可能有不同的数据需求和使用模式。因此,设计一个高效且安全的数据库架构…

【NodeJs】入门

目录 一、前导 二、 url模块 三、path模块 四、buffer模块 五、fs模块 六、stream流模块 七、os模块 八、crypto模块 九、util模块 十、http模块 nodejs官网 Node.js — 在任何地方运行 JavaScript nmp是Node.js包管理器,用来安装各种库、框架和工具&…

ForkJoin

线程数超过CPU核心数是没有任何意义的【因为要使用CPU密集型运算】 Fork/Join:线程池的实现,体现是分治思想,适用于能够进行任务拆分的 CPU 密集型运算,用于并行计算 任务拆分:将一个大任务拆分为算法上相同的小任务…

【鸿蒙】开发中设置热更新

鸿蒙系统(HarmonyOS)的热更新和热加载设置主要涉及开发环境和系统更新两个方面。以下是关于鸿蒙系统热更设置的详细步骤和相关信息: 开发环境热更新和热加载设置 在鸿蒙系统的开发环境中,实现热更新和热加载通常用于快速迭代和测…

pdf怎么转换成jpg,本地转换还是在线转换?

PDF(Portable Document Format)和JPG(Joint Photographic Experts Group)这两种文件格式在我们的日常生活和工作中扮演着举足轻重的角色。PDF因其跨平台、保持原样性强的特点,被广泛应用于文件传输和存储;而…

iCloud邮件全攻略:设置与使用终极指南

标题:iCloud邮件全攻略:设置与使用终极指南 摘要 iCloud邮件是Apple提供的一项邮件服务,允许用户在所有Apple设备上访问自己的邮件。本文将详细介绍如何在各种设备和邮件客户端上设置和使用iCloud邮件账户,确保用户能够充分利用…

百日筑基第六天-了解一下Dubbo

百日筑基第六天-了解一下Dubbo Dubbo 是一款高性能、轻量级的开源 WEB 和 RPC 框架。 Dubbo 提供了六大核心能力: 面向接口代理的高性能 RPC 调用。智能容错和负载均衡。服务自动注册和发现。高度可扩展能力。运行期流量调度。可视化的服务治理与运维。 简单来说…

代码随想三刷动态规划篇2

代码随想三刷动态规划篇2 62. 不同路径题目代码63. 不同路径 II题目代码343. 整数拆分题目代码96. 不同的二叉搜索树题目代码62. 不同路径 题目 链接 代码 class Solution {public int uniquePaths(int m, int n) {int[][]dp =</

技术周总结 2024.06.24~06.30(Python并发执行shell并发执行)

文章目录 一、 06.26 周三1.1&#xff09;问题01&#xff1a;怎么在mysql的命令行中查询出来 python能使用的元祖结果集1.2&#xff09;问题02&#xff1a;python中 set()是什么&#xff0c;怎么使用 二、06.27 周四2.1&#xff09;问题01&#xff1a;shell 并发执行2.2&#x…

从0到1搭建Java开发环境(内涵超详细教程、软件、提供网盘链接直接一步到位!!!!)

软件部分 需要的软件为下面两个&#xff1a; IDEANavicat 需要的可以自行拿&#xff08;安装教程和软件&#xff09;&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1y3RoMt0ZapyJsj3P0DPaVA?pwdxr4p 提取码&#xff1a;xr4p 环境部分 需要的环境为以下几个&…

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

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

IntelliJ IDEA新建gradle项目

在 IntelliJ IDEA 中新建一个 Gradle 项目非常简单,以下是详细的步骤指南: 步骤 1: 打开 IntelliJ IDEA 并创建新项目 启动 IntelliJ IDEA:打开 IntelliJ IDEA 应用程序。 创建新项目: 在欢迎屏幕中,点击 New Project。如果已经打开了一个项目,可以通过 File > New &…

数据科学中的瑞士军刀:Scikit-learn中的交叉验证详解

标题&#xff1a;数据科学中的瑞士军刀&#xff1a;Scikit-learn中的交叉验证详解 交叉验证是机器学习中用于评估模型泛化能力的重要技术。Scikit-learn&#xff0c;作为Python中一个广泛使用的机器学习库&#xff0c;提供了一套强大的交叉验证工具。本文将深入探讨Scikit-lea…

【Qt+opencv】编译、配置opencv

文章目录 前言下载opencv编译opencvmingw版本 总结 前言 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库&#xff0c;它包含了超过2500个优化的算法。这些算法可以用来检测和识别面部&#xff0c;识别对象&#x…