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 编写代码完成读入图像,改变图像尺寸,旋转、裁剪图像, 计算图像的基本特征指标等功能并展示结果。
①主要函数及其参数
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 库编写代码完成读入图像,改变图像尺寸,旋转、 裁剪图像,计算图像的基本特征指标等功能并展示结果。
① 主要函数及其参数
请填写以下函数对应的参数说明:
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 库时,你遇到了哪些问题,是如何解决的。
答:没有任何困难,按照网上教程傻瓜式安装即可。