OpenCV系列__chapter2
博客鏈接:
https://blog.csdn.net/qq_35732321/article/details/131921406?spm=1001.2014.3001.5502
@[TOC](OpenCV系列__chapter2)
## 1 圖像加減乘除位運(yùn)算
?### 1.1 加法 img = CV2.add(img1, img2)
?```python
?import CV2
import numpy as np
import matplotlib.pyplot as plt
lena = CV2.imread('lenacolor.png',-1)
noise = np.random.randint(0,255,lena.shape,dtype=np.uint8)
img_add = lena+noise
img_cv_add = CV2.add(lena,noise)
plt.subplot(221)
plt.title('lena')
plt.imshow(lena[...,::-1])
plt.subplot(222)
plt.title('noise')
plt.imshow(noise[...,::-1])
plt.subplot(223)
plt.title('img_add')
plt.imshow(img_add[...,::-1])
plt.subplot(224)
plt.title('img_cv_add')
plt.imshow(img_cv_add[...,::-1])
plt.show()
```

? ### 1.2 減法 img = CV2.subtract(img1, img2)
? ?```python
?import CV2
import numpy as np
import matplotlib.pyplot as plt
img_0 = CV2.imread('34.jpeg',-1)
img_1 = CV2.imread('35.jpeg',-1)
img_sub = CV2.subtract(img_0, img_1)
plt.subplot(131)
plt.title('img_0')
plt.imshow(img_0[...,::-1])
plt.subplot(132)
plt.title('img_1')
plt.imshow(img_1[...,::-1])
plt.subplot(133)
plt.title('img_sub')
plt.imshow(img_sub[...,::-1])
plt.show()
```

? ??
? ?```python
?import CV2
import numpy as np
import matplotlib.pyplot as plt
?img_0 = CV2.imread('img_no.png',0)
img_1 = CV2.imread('sub.png',0)
img_sub = CV2.subtract(img_0, img_1)
plt.subplot(131)
plt.title('img_0')
plt.imshow(img_0,cmap='gray')
plt.subplot(132)
plt.title('img_1')
plt.imshow(img_1,cmap='gray')
plt.subplot(133)
plt.title('img_sub')
plt.imshow(img_sub,cmap='gray')
plt.show()
```

? ### 1.3 乘法 img = CV2.multiply(img1, img2)
? ?```python
?import CV2
import numpy as np
import matplotlib.pyplot as plt
lena = CV2.imread('lenacolor.png',-1)
mask = np.zeros_like(lena,np.uint8)
mask[204:392,213:354] = 1
img_mul = CV2.multiply(lena, mask)
plt.subplot(131)
plt.title('lena')
plt.imshow(lena[...,::-1])
plt.subplot(132)
plt.title('mask')
plt.imshow(mask[...,::-1])
plt.subplot(133)
plt.title('img_mul')
plt.imshow(img_mul[...,::-1])
plt.show()
```

? ### 1.4 除法 img = CV2.divide(img1, img2)
?
? ?```python
import CV2
import numpy as np
import matplotlib.pyplot as plt
lena = CV2.imread('lenacolor.png',0)
img_noise = CV2.circle(lena.copy(),(280,300),150,(0,255,0),10)
img_div = CV2.divide(img_noise,lena)
plt.subplot(131)
plt.title('lena')
plt.imshow(lena,cmap='gray')
plt.subplot(132)
plt.title('img_noise')
plt.imshow(img_noise,cmap='gray')
plt.subplot(133)
plt.title('img_div')
plt.imshow(img_div,cmap='gray')
plt.show()
```

### 1.5 位運(yùn)算 CV2.bitwise_and()
? ?```python
import CV2
import numpy as np
import matplotlib.pyplot as plt
lena = CV2.imread('lenacolor.png',1)
mask = np.zeros_like(lena,dtype=np.uint8)
mask = CV2.circle(mask,(280,280),111,(255,255,255),-1)
re = CV2.bitwise_and(lena,mask)
plt.subplot(131)
plt.title('lena')
plt.imshow(lena[...,::-1])
plt.subplot(132)
plt.title('mask')
plt.imshow(mask[...,::-1])
plt.subplot(133)
plt.title('re')
plt.imshow(re[...,::-1])
plt.show()
```

?```python
import CV2
import numpy as np
import matplotlib.pyplot as plt
lena = CV2.imread('lenacolor.png',1)
mask = np.zeros(lena.shape[:2],dtype=np.uint8)
mask = CV2.circle(mask,(280,280),111,(255,255,255),-1)
re = CV2.bitwise_and(lena,lena,mask=mask)
plt.subplot(131)
plt.title('lena')
plt.imshow(lena[...,::-1])
plt.subplot(132)
plt.title('mask')
plt.imshow(mask,'gray')
plt.subplot(133)
plt.title('re')
plt.imshow(re[...,::-1])
plt.show()
```

## 2 圖像增強(qiáng)
? ### 2.1 線性變換
? ```python
? import CV2
import numpy as np
import matplotlib.pyplot as plt
img = CV2.imread('lianhua.png',1)
re = img*2+10
re = re.astype(np.uint8)
plt.subplot(121)
plt.title('img')
plt.imshow(img[...,::-1])
plt.subplot(122)
plt.title('re')
plt.imshow(re[...,::-1])
plt.show()
```

? ### 2.2 非線性變換
??
? ```python
? import CV2
import numpy as np
import matplotlib.pyplot as plt
## 1 gamma
def gamma_aug(img,c,gamma):
? ? gamma_table=[c*np.power(x/255.0,gamma)*255.0 for x in range(256)]
? ? gamma_table=np.round(np.array(gamma_table)).astype(np.uint8)
? ? return CV2.LUT(img,gamma_table)
## 2 log
def log_aug(img,c,r):
? ? gamma_table=[c*np.log10(1+x/255.0*r)*255.0 for x in range(256)]
? ? gamma_table=np.round(np.array(gamma_table)).astype(np.uint8)
? ? return CV2.LUT(img,gamma_table)
if __name__ == '__main__':
? ? img = CV2.imread('lianhua.png',1)
? ? img11 = ?gamma_aug(img,c=1,gamma=0.1)
? ? img12 = gamma_aug(img, c=1, gamma=0.8)
? ? img21 = log_aug(img, c=1, r=10)
? ? img22 = log_aug(img, c=2, r=10)
? ? plt.subplot(231)
? ? plt.title('img')
? ? plt.imshow(img[...,::-1])
? ? plt.subplot(232)
? ? plt.title('img11')
? ? plt.imshow(img11[..., ::-1])
? ? plt.subplot(233)
? ? plt.title('img12')
? ? plt.imshow(img12[..., ::-1])
? ? plt.subplot(234)
? ? plt.title('img')
? ? plt.imshow(img[...,::-1])
? ? plt.subplot(235)
? ? plt.title('img21')
? ? plt.imshow(img21[..., ::-1])
? ? plt.subplot(236)
? ? plt.title('img22')
? ? plt.imshow(img22[..., ::-1])
? ? plt.show()
```

## 3 圖像幾何變換
? ### 3.1 裁剪、放大、縮小
? ?```python
? ?
```
? ### 3.2 平移變換
? ?```python
? ?
```
? ### 3.3 錯切變換
??
? ```python
??
```
? ### 3.4 鏡像變換
??
? ```python
??
```
? ### 3.5 旋轉(zhuǎn)變換
? ? ?
? ?```python
? ?
```
? ### 3.6 透視變換
? ?```python
? ?
```
?### ?3.7 最近鄰插值、雙線性插值
? ?```python
? ?
```