###### tags: `OpenCV`,`影像處理`,`鏡像處理` # OpenCV 基礎篇-實作-惡搞我家小孩part2(鏡像處理,垂直與水平鏡像) 挑選照片(手機照片尺寸過大,先用resize處理一下照片) ```python= import matplotlib.pyplot as plt import cv2 import numpy as np img = cv2.imread('photo3-1.jpg') img_resize = cv2.resize(img, (0,0), fx=0.6, fy=0.6) #原尺寸過大 調整一下尺寸 plt.imshow(img_resize[:,:,::-1]) #把BGR調成RBG img_resize.shape #確定一下尺寸 #(451, 638, 3) ``` ![](https://i.imgur.com/wXsZid4.jpg) ```python= #先做出雙倍高的空間,上層為原照片 imgNew = np.zeros((902,626,3),dtype=np.uint8) #451*2 = 902 imgNew[:451,:] = img_resize #row [0:451]為原圖 先做上半部 plt.imshow(imgNew[:,:,::-1]) ``` ![](https://i.imgur.com/19dmZDv.jpg) ```python= #做出顛倒的一張 imgInverted = img_resize[::-1,:,:] #row顛倒 #顏色再顛倒 plt.imshow(imgInverted[:,:,::-1]) #把BGR調成RBG ``` ![](https://i.imgur.com/xTYrGqF.jpg) ```python= #加入下半部 imgNew[451:][:] = imgInverted plt.imshow(imgNew[:,:,::-1]) ``` ![](https://i.imgur.com/6PkIcYs.jpg) **水平鏡像** ```python= import matplotlib.pyplot as plt import cv2 import numpy as np img1 = cv2.imread('photo7.jpg') plt.imshow(img1[:,:,::-1]) #把BGR調成RBG img1.shape #(860, 431, 3) cv2.imwrite("photo7-1.jpg",img1) ``` ![](https://i.imgur.com/NqDBM9c.jpg) ```python= #column相反 imgInverted1 = img1[:,::-1,:] #顏色再顛倒 plt.imshow(imgInverted1[:,:,::-1]) imgInverted1.shape #(860, 431, 3) cv2.imwrite("photo7-2.jpg",imgInverted1) ``` ![](https://i.imgur.com/SxGw5nB.jpg) ```python= img_con = cv2.hconcat([img1, imgInverted1]) plt.imshow(img_con[:,:,::-1]) cv2.imwrite("photo7-3.jpg",img_con) img_con.shape #(860, 862, 3) ``` ![](https://i.imgur.com/7j1MAOS.jpg) **CV2.HCONCAT() AND CV2.VCONCAT()** cv2.hconcat([img1, img2, ...]) * 水平串接 * 照片高度需相同(row),channels也要一致 * 照片寬度可以不同(columns) cv2.vconcat([img1, img2, ...]) * 垂直串接 * 照片寬度需相同(columns),channels也要一致 * 照片高度可以不同(rows)