基本信息
文件名称:Python计算机视觉编程与应用 习题及答案 第3章 习题答案.docx
文件大小:20.81 KB
总页数:9 页
更新时间:2025-06-19
总字数:约7.31千字
文档摘要

第三章习题

3-1请使用PIL库读取一张图像,并从中裁剪出一个150×150像素的区域,该区域的左上角坐标为(100,100)。接着,将裁剪得到的区域旋转45度,并将其粘贴回原图像的左上角。完成这些操作后,将处理后的图像保存为一个新的文件。请提供代码示例,并显示处理前后的图像,解释裁剪、旋转和粘贴操作的效果。

答:代码示例:

fromPILimportImage

#读取图像

image=Image.open(input_image.jpg)

#裁剪出150x150像素的区域,左上角坐标为(100,100)

cropped_region=image.crop((100,100,250,250))

#将裁剪的区域旋转45度

rotated_region=cropped_region.rotate(45,expand=True)

#将旋转后的区域粘贴回原图像的左上角

image.paste(rotated_region,(0,0))

#保存处理后的图像

image.save(output_image.jpg)

解释裁剪、旋转和粘贴操作的效果

裁剪操作:使用crop()方法从原图像中截取一个左上角坐标为(100,100)、宽高为150×150的区域。这一部分被存储为一个新的图像对象cropped_region。

旋转操作:使用rotate()方法将裁剪得到的区域旋转45度,并且使用expand=True参数来自动调整图像大小以适应旋转后的区域,这样不会剪裁掉旋转后的部分。

粘贴操作:使用paste()方法将旋转后的图像区域粘贴到原图像的左上角(0,0)位置。

3-2使用Matplotlib库读取并显示一张图像。在图像中绘制一个红色的点,点的坐标为(50,50),并绘制一条绿色的直线,直线的起始坐标为(20,20),终止坐标为(100,100)。此外,计算并绘制图像的灰度直方图,解释直方图的形状及其含义。请提供代码示例,并显示绘制点和线后的图像,解释直方图的生成过程及其分析。

答:代码示例:

importmatplotlib.pyplotasplt

importnumpyasnp

fromPILimportImage

#使用PIL读取图像

image_path=input_image.jpg#请替换为你的图像文件路径

image=Image.open(image_path)

#将图像转换为NumPy数组以便Matplotlib处理

image_array=np.array(image)

#显示图像并绘制点和线

plt.figure(figsize=(10,5))

#在子图1中绘制原始图像

plt.subplot(1,2,1)

plt.imshow(image_array)

plt.scatter(50,50,color=red,s=40)#绘制红色点

plt.plot([20,100],[20,100],color=green,linewidth=2)#绘制绿色线

plt.title(ImagewithPointandLine)

plt.axis(off)

#将图像转换为灰度并计算灰度直方图

gray_image=image.convert(L)

gray_array=np.array(gray_image)

#在子图2中绘制灰度直方图

plt.subplot(1,2,2)

plt.hist(gray_array.ravel(),bins=256,range=(0,256),color=black)

plt.title(GrayscaleHistogram)

plt.xlabel(PixelIntensity)

plt.ylabel(Frequency)

#显示所有的绘图结果

plt.tight_layout()

plt.show()

解释图像上的点和线绘制

红色点绘制:

使用plt.scatter()方法在图像的(50,50)坐标处绘制一个大小为40的红色点。

绿色线绘制:

使用plt.plot()方法从坐标(20,20)到(100,100)绘制一条绿色的线。

解释灰度直方图生成过程及其含义

生成过程:首先将原图像转换为灰度模式,得到每个像素的灰度值。然后使用plt.hist()函数计算并绘制灰度值的频率分布。

直方图的含义:横轴表示灰度值(从0到255),纵轴表示每个灰度值的像素频率。直方图的形状反映了图像亮度的分布:

如果直方图集中在