前言
我前年看過了《Opencv3編程入門》,當時我下的是Opencv4.0.1 , 所以有些代碼用不了就改成了適合早期4.0的代碼了,不知道后面的版本的使用方法變了沒,
我只記得概念特別多,我也看不懂,盡管筆記都做出來了,后面也沒有專案經驗,就都忘了,也是因為學的不好,不知道該怎么實踐,你說磨皮,非線性濾波和高斯模糊這種東西,這就呼叫個函式的事,不屑于去做,但是物體識別也不懂,特征不知道怎么找
影像加載顯示
import numpy as np
from sklearn import preprocessing
from sklearn.preprocessing import Normalizer
from sklearn.preprocessing import FunctionTransformer
from sklearn.preprocessing import Binarizer
from sklearn.preprocessing import PolynomialFeatures
from sklearn.preprocessing import StandardScaler
import pandas as pd
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
from fancyimpute import KNN
from sklearn.covariance import EllipticEnvelope
from sklearn.preprocessing import LabelBinarizer, MultiLabelBinarizer
from sklearn.feature_extraction import DictVectorizer
from sklearn.neighbors import KNeighborsClassifier
import cv2
from matplotlib import pyplot as plt
#版本
print("cv version : ",cv2.__version__)
"""
cv2.IMREAD_COLOR 彩色BGR
cv2.IMREAD_GRAYSCALE 灰度
cv2.IMREAD_UNCHANGED 原圖BGRA
"""
src_image=cv2.imread("ntr.jpg",cv2.IMREAD_COLOR)
h,w=src_image.shape[:2]
dst_image = cv2.resize(src_image,(int(w/2),int(h/2)))
print(type(src_image))
print(src_image.shape)
#print(src_image)
cv2.imshow("src",src_image)
cv2.imshow("dst",dst_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
# plt.subplot(2,2,1)
# plt.imshow(src_image,cmap="gray")
# plt.subplot(2,2,2)
# plt.imshow(src_image)
# plt.axis("on")
# plt.show()

cv version : 4.5.4-dev
<class 'numpy.ndarray'>
(797, 564, 3)
單個點的像素值
src_image=cv2.imread("ntr.jpg",cv2.IMREAD_COLOR)
print(src_image.shape)
print(src_image[0,0]) #BGR
print('--------------------------------------------------------')
src_image2=cv2.imread("sister.png",cv2.IMREAD_UNCHANGED)
print(src_image2.shape)
#角上的點
print(src_image2[0,0])
print('--------------------------------------------------------')
h,w=src_image2.shape[:2]
#中間的點
print(src_image2[int(w/2),int(h/2)]) #BGRA
cv2.imshow("ntr.jpg",src_image)
cv2.imshow("sister.png",src_image2)
cv2.waitKey(0)
cv2.destroyAllWindows()
- []尋址必須是整數
(797, 564, 3)
[158 148 148]
--------------------------------------------------------
(518, 541, 4)
[255 255 255 0]
--------------------------------------------------------
[229 248 253 255]

- sister.png是用PS扣過背景的透明圖
- 不扣背景,只是用格式工廠轉成png的話,還是沒用Alpha通道,只是BGR三個通道
cvtColor色彩空間轉換
#BGR
src_image=cv2.imread("yes.png",cv2.IMREAD_COLOR)
"""
cv2.COLOR_BGR2GRAY
cv2.COLOR_RGB2GRAY
cv2.COLOR_GRAY2BGR
cv2.COLOR_GRAY2RGB
cv2.COLOR_BGR2RGB
cv2.COLOR_BGR2HSV
cv2.COLOR_RGB2HSV
cv2.COLOR_HSV2BGR
cv2.COLOR_HSV2RGB
cv2.COLOR_BGR2YUV
cv2.COLOR_RGB2YUV
cv2.COLOR_YUV2BGR
cv2.COLOR_YUV2RGB
"""
#RGB
dst_image=cv2.cvtColor(src_image,cv2.COLOR_BGR2RGB)
plt.subplot(1,2,1)
plt.imshow(src_image)
plt.subplot(1,2,2)
plt.imshow(dst_image)
plt.show()
- BGR格式的資料在matplotlib上顯示不好

裁剪
img1=cv2.imread("cute.jpg",cv2.IMREAD_COLOR)
h,w=img1.shape[:2]
img2=img1[:,: int(w/2)] #裁掉右邊一半
img3=img1[: int(h/2),:] #裁掉下面一半
cv2.imshow("1",img1)
cv2.imshow("2",img2)
cv2.imshow("3",img3)
cv2.waitKey(0)
cv2.destroyAllWindows()

線性濾波
boxFilter 方框濾波
img1=cv2.imread("fox.jpg",cv2.IMREAD_COLOR)
h,w=img1.shape[:2]
"""
boxFilter的卷積核
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
"""
img2=cv2.boxFilter(img1,
-1, #輸出深度為原圖深度
(5,5), #卷積核5X5
True #要歸一化
)
cv2.imshow("1",img1)
cv2.imshow("2",img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

blur 均值濾波
img1=cv2.imread("stare.jpg",cv2.IMREAD_COLOR)
h,w=img1.shape[:2]
"""
blur的卷積核
0 0 1 0 0
0 1 1 1 0
1 1 1 1 1
0 1 1 1 0
0 0 1 0 0
"""
img2=cv2.blur(img1,
(5,5), #卷積核5X5
)
cv2.imshow("1",img1)
cv2.imshow("2",img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

GaussianBlur 高斯濾波
img1=cv2.imread("happy.jpg",cv2.IMREAD_COLOR)
h,w=img1.shape[:2]
img2=cv2.GaussianBlur(img1,
(5,5), #卷積核5X5
0.8 , #表示高斯核函式在X方向的標準偏差
0.8 #在Y方向的標準偏差
)
cv2.imshow("1",img1)
cv2.imshow("2",img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

filter2D 自定義核
img1=cv2.imread("my.jpg",cv2.IMREAD_COLOR)
h,w=img1.shape[:2]
kernel=np.ones((5,5))/5
print(kernel)
img2=cv2.filter2D(img1,-1,kernel)
cv2.imshow("1",img1)
cv2.imshow("2",img2)
cv2.waitKey(0)
cv2.destroyAllWindows()
核為 np.ones((5,5))/100

核為 np.ones((5,5))/25

核為 np.ones((5,5))/5

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/352051.html
標籤:其他
