CV-基礎知識及原理總結
1 本體
概念: 計算機視覺中的圖像由像素點組成。
300*500的圖片 x*y注意是先w*h ,寬為300 高為500,x向排列300個像素點
每個像素點即是一個數值(根據顏色通道而定)0-255 0 為黑色,255為最亮,即白色
通道:彩色圖片,rgb,opencv bgr,三通道,即一個像素點在r通道有一個值,在g通道有一個值,b同理。合在一起顯示了最終該像素點顏色。
黑白圖片 通道只有一個。
幀:視頻每秒設備處理的一張圖片。比如每秒30幀,人眼看着就是很自然,1秒鍾處理30張圖片。
openCV使用
基本讀取:
image=r"images/andrew_j_feustel_lmks5_rgb_test.jpg"
base="images/cv_debug"
faceid=cv2.imread(image)
print(faceid.shape)
face_part=faceid[90:170,375:475]
import time
save=os.path.join(base,"image_%s.jpg"%int(time.time()))
cv2.imwrite(save,face_part)
# ######## 繪制 框
save_rects=os.path.join(base,"image_rects_%s.jpg"%int(time.time()))
cv2.rectangle(faceid,(375,90),(475,170),color=(0,0,255),thickness=4)
cv2.imwrite(save_rects,faceid)
# ######## 繪制圓點
save_cir = os.path.join(base, "image_circle_%s.jpg" % int(time.time()))
for cor in [(100,100),(500,500)]:
cv2.circle(faceid, cor, color=(0,0,255),radius=10)
cv2.imwrite(save_cir, faceid)
# ######## 圖像按照顏色通道分割
b,g,r=cv2.split(faceid)
c=1
for s in (b,g,r):
cv2.imwrite("%s_%s.jpg"%(c,int(time.time())), s)
c+=1
# ######## 三個通道的數據merge
yuhang=cv2.merge((b,g,r))
cv2.imwrite("yuhang.jpg", yuhang)
blue=faceid.copy()
blue[:,:,1]=0
blue[:, :, 2] = 0
cv2.imwrite("blue.jpg", blue)
# ######## 單獨建一個數據結構,不在原數據上操作,也可copy.deepcopy()
red=faceid.copy()
# ######## 對數據0,1通道全部數據置為最暗顏色/顯示為全黑色。剩下的通道即為顯現顏色。全紅或全綠。
red[:,:,0]=0
red[:, :, 1] = 0
cv2.imwrite("red.jpg", red)
邊緣檢測
1 梯度處理
def gradient_img(fn, sv):
img=read_image_file(fn)
# 算子sobel
gx1=cv2.Sobel(img,cv2.CV_64F,1,0,)
gy1=cv2.Sobel(img,cv2.CV_64F,0,1,)
imgadd=cv2.addWeighted(gx1,0.5,gy1,0.5,0)
# 算子scharr
gx=cv2.Scharr(img,cv2.CV_64F,1,0)
gy=cv2.Scharr(img,cv2.CV_64F,0,1)
img_sch=cv2.addWeighted(gx,0.5,gy,0.5,0)
img_all=np.hstack((imgadd,img_sch))
cv2.imwrite(sv,img_all)
