# 数据建模-数据集处理
*****
**以下内容均按照作者的个人思路去编排,如果有更好的想法等,则以自己的优先**
*****
## 一、图像切割
### 1. 定义:图像切割的意思是**截取图像的某一部分,达到分割的目的**
### 2. 范例:
①首先是原始图像
![](https://img.kancloud.cn/5d/33/5d335312b6b933ca5f7253f914a21c0c_188x188.png)
显然这是一幅山景图,如果把这个图像**画两条水平和竖直的对称轴,图像就可以被分为四块**
![](https://img.kancloud.cn/84/8d/848d41e0d7b7bf88afb6af5e03ed80b9_150x150.png)
现在我们**想要截取图像的某一角**,该怎么实现呢?下面的‘**代码实践**‘将会教给大家
②'代码实践'
```
import cv2
# 【指定图像文件路径(此处使用绝对路径)】
img = cv2.imread('D:/Source Code/Python/Conda/AI/exampls/seg_train/seg_train/forest/8.jpg',1)#(1彩色读取,0灰度读取)
##
image_width = img.shape[1]#图像的水平尺寸(宽度)
image_height = img.shape[0]#图像的垂直尺寸(高度)
### 【裁剪图像,0,0代表图像左上角的坐标(起始坐标)】
# 【左上部分截取】
imCrop_left_top = img[0 : image_height//2, 0:image_width//2]
# 【左下部分截取】
imCrop_left_down = img[image_height//2 : image_height, 0:image_width//2]
#【右上部分截取】
imCrop_right_top = img[0 : image_height//2, image_width//2:image_width]
#【右下部分截取】
imCrop_right_down = img[image_height//2 : image_height, image_width//2:image_width]
# #######显示图片的代码########
# 【显示原始图像】
cv2.imshow('image',img) #(窗口标题,图像)
cv2.namedWindow('image',cv2.WINDOW_NORMAL)#(窗口标题,cv2.WINDOW_AUTOSIZE:自动调节大小/cv2.WINDOW_NORMAL:手动调节大小)
# 【显示左上图像】
cv2.imshow("left_top", imCrop_left_top)
# 【显示左下图像】
cv2.imshow("left_down", imCrop_left_down)
# 【显示右上图像】
cv2.imshow("right_top", imCrop_right_top)
# 【显示右下图像】
cv2.imshow("right_down", imCrop_right_down)
##以下两行代码很重要
cv2.waitKey()#(展示图像的窗口持续显示多少秒,0/空:一直显示直到按下键位)
cv2.destroyAllWindows()#(删除所有图像展示窗口)
--------------------------------------------------------------------
##亦可用matplotlib显示
#import matplotlib.pylab as plt #(加载库)
#plt.subplot(2, 2, 1) #(行,列,位置)
#plt.imshow(img) #显示图片
---------------------------------------------------------------------
```
结果:(与之类似即可)
![](https://img.kancloud.cn/b3/2c/b32cbdd8de4b9766bc910bc1ba0809f9_657x187.png)
* 拓展学习
上述范例中,给予的是最基础的例子,如果大家想要更深一步的去研究,可以[访问本链接](https://blog.csdn.net/weixin_40633696/article/details/108838547?spm=1001.2101.3001.6650.15&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-15.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-15.no_search_link)进行学习
*****
## 二、图像几何变换
1. ### 翻转图片
```
#Ⅰ.读取图片
import cv2
img = cv2.imread('D:/Source Code/Python/Conda/AI/exampls/pokeman/pokemanpicture/pikachu/1.jpg',1)#(注意是反斜杠)
#Ⅱ.水平翻转
img1=cv2.flip(img,1)
#Ⅲ.垂直翻转
img2=cv2.flip(img,0)
#Ⅲ.水平垂直翻转
img3=cv2.flip(img,-1)
#Ⅳ.展示图片
cv2.imshow('image',img)
cv2.imshow('image1',img1)
cv2.imshow('image2',img2)
cv2.imshow('image3',img3)
#*必要的部分
cv2.waitKey()
cv2.destroyAllWindows()
```
结果:(与之类似即可)
![](https://img.kancloud.cn/ac/c5/acc593ff9eb6d808ae94ee455aacdd8a_1779x942.png)
*****
### 2. 缩放图片
```
import cv2
img = cv2.imread('D:/Source Code/Python/Conda/AI/exampls/pokeman/pokemanpicture/pikachu/1.jpg',1)#(注意是反斜杠)
#(打印原图片的尺寸,输出值为高,宽,通道数:1:单色(灰色等),2:不常见,可忽略,3:常指RGB彩色,4:在'3'的基础上多了'透明度'的通道)
print(img.shape)
# 将图片高和宽分别赋值给x,y
x, y = img.shape[0:2]
# 缩放到原来的二分之一,这里要注意,输出尺寸格式为(宽,高)
img_test1 = cv2.resize(img, (int(y / 2), int(x / 2)))
#打印缩放后的图片的尺寸
print(img_test1.shape)
# 显示原图
cv2.imshow('OriginalPicture', img)
#显示缩放后的图
cv2.imshow('resize0', img_test1)
cv2.waitKey()
cv2.destroyAllWindows()
```
结果:(与之类似即可)
![](https://img.kancloud.cn/96/a6/96a673ca6a8095369f71c6cdd5967699_1170x798.png)
* 拓展学习
上述范例中,给予的是最基础的例子,如果大家想要更深一步的去研究,可以[访问本链接](https://www.jianshu.com/p/79052fbf477d)进行学习
*****
### 3. 剪裁图片
```
import cv2
import matplotlib.pylab as plt
img = cv2.imread("D:/Source Code/Python/Conda/AI/exampls/pokeman/pokemanpicture/pikachu/1.jpg",1)
#直接读取图像会变色,因为opencv是按照bgr通道读取的
#读取源图像,并显示
(r, g, b) = cv2.split(img)#(把img图像的通道拆分为r通道,g通道,b通道)
img = cv2.merge([b, g, r])#(将r通道,g通道,b通道合并成bgr通道,赋给img)
plt.subplot(2, 2, 1)
plt.imshow(img)
#对图像进行剪裁
img1=img[250:750,0:500]#保留的部分(y:起始:终止,x:起始:终止)
plt.subplot(2,2,2)
plt.imshow(img1)
```
结果:(与之类似即可)
![](https://img.kancloud.cn/7b/f8/7bf8ab23a886fa2937143fd85d942674_671x253.png)
* 拓展学习
上述范例中,给予的是最基础的例子,如果大家想要更深一步的去研究,可以[访问本链接](https://www.jb51.net/article/211183.htm)进行学习
*****
### 4. 灰度化图片
```
import cv2
#直接在读取的时候进行灰度化
img = cv2.imread("D:/Source Code/Python/Conda/AI/data/seg_data/seg_train/seg_train/forest/8.jpg",0)
print(img.shape)
#采用cv2.COLOR_RGB2GRAY函数
img1 = cv2.imread("D:/Source Code/Python/Conda/AI/data/seg_data/seg_train/seg_train/forest/8.jpg",1)
print(img1.shape)
dst = cv2.cvtColor(img1,cv2.COLOR_RGB2GRAY)#灰度化
print(dst.shape)
cv2.imshow("img",img)
cv2.imshow("img0",img1)
cv2.imshow("dst",dst)
cv2.waitKey()
```
结果:(与之类似即可)
![](https://img.kancloud.cn/18/a2/18a2424fab1449154851920f993e8e35_462x188.png)
* 拓展学习
上述范例中,给予的是最基础的例子,如果大家想要更深一步的去研究,可以[访问本链接](https://www.cnblogs.com/zhouzetian/p/12837120.html)进行学习