opencv-python圖像處理基礎(一)




#一.讀取圖像數據
import  cv2 

img=cv2.imread("d:/image0.JPG")   #讀取圖片數據
print(img)
cv2.imshow('image',img)       #顯示窗口數據
cv2.waitKey(0)                #等待延遲
cv2.destroyAllWindows()



print(img) #打印像素值通道

 

 從這個結果可以出:現在每個像素都由一個三元素組表示,並且每個整型(integer)向量

分別表示一個B,G,R通道。其他色彩空間(如hsv)也以同樣地方式來表示像素,只是取值范圍和通道數目不同
(例如,hsv)

print(img.shape)#打印通道

 

 

讀取圖像處理

cv2.IMREAD_COLOR:彩色圖像

cv2.IMREAD_GRAYSCALE:灰度圖像

 

 灰度圖像處理

import  cv2 as cv
import numpy as np

img1=cv.imread("d:/image0.JPG",cv.IMREAD_GRAYSCALE)   #讀取灰圖片數據
print(img1)
print(img1.shape)
cv.imshow('image',img1)       #顯示窗口數據
cv.waitKey(0)                #等待延遲
cv.destroyAllWindows()

 

 

 

 

 

結果可以和色彩圖像對比

 

二,數據讀取-視頻

cv2.VideoCapture可以捕獲攝像頭,用數字來控制不同的設備,例如0,1。

如果是視頻文件,直接指定好路徑即可。

import  cv2 
vc=cv2.VideoCapture(0)  #打開攝像頭
if vc.isOpened():             #判斷攝像頭狀態
    open ,frame=vc.read()
else:
    open=False
while open:
    ret,frame=vc.read()    #frame幀率
    if frame is None:
        break
    if ret==True:
        gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) #灰色處理
        cv2.imshow("result",gray)
    if cv2.waitKey(10)& 0xFF==27:
break

vc.release()
cv2.destroyAllWindows()

讀取攝像頭並且設置為灰色模式

 

剪切圖像

import cv2
img=cv2.imread("d:/image0.JPG")
flower=img[0:200,0:200]           #剪切圖像
cv2.imshow('image',flower)       #顯示窗口數據
cv2.waitKey(0)                #等待延遲
cv2.destroyAllWindows()

 

 

 顏色通道地提取只保留r通道

import cv2
img=cv2.imread("d:/image0.JPG")
b,g,r=cv2.split(img)
print(b)
#只保留b結果
cur_img=img.copy()
cur_img[:,:,0]=0
cur_img[:,:,1]=0
cv2.imshow('image',cur_img)       #顯示窗口數據
cv2.waitKey(0)                #等待延遲
cv2.destroyAllWindows()

 

 

 

  顏色通道地提取只保留g通道

import cv2
img=cv2.imread("d:/image0.JPG")
b,g,r=cv2.split(img)
print(b)
#只保留b結果
cur_img=img.copy()
cur_img[:,:,0]=0
cur_img[:,:,2]=0
cv2.imshow('image',cur_img)       #顯示窗口數據
cv2.waitKey(0)                #等待延遲
cv2.destroyAllWindows()

 

 

   顏色通道地提取只保留b通道

import  cv2
img=cv2.imread("d:/image0.JPG")
b,g,r=cv2.split(img)
print(b)
#只保留b結果
cur_img=img.copy()
cur_img[:,:,1]=0
cur_img[:,:,2]=0
cv2.imshow('image',cur_img)       #顯示窗口數據
cv2.waitKey(0)                #等待延遲
cv2.destroyAllWindows()

 

 邊界填充

BORDER_REPLICATE:復制法,也就是復制最邊緣像素。

BORDER_REFLECT:反射法,對感興趣的圖像中的像素在兩邊進行復制例如:fedcba|abcdefgh|hgfedcb

BORDER_REFLECT_101:反射法,也就是以最邊緣像素為軸,對稱,gfedcb|abcdefgh|gfedcba

BORDER_WRAP:外包裝法cdefgh|abcdefgh|abcdefg

BORDER_CONSTANT:常量法,常數值填充。

import cv2
import matplotlib.pyplot as plt
img=cv2.imread("d:/cat.JPG")
top_size,bottom_size,left_size,right_size = (50,50,50,50)

replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_WRAP)
constant = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_CONSTANT, value=0)
plt.subplot(231), plt.imshow(img, 'gray'), plt.title('ORIGINAL')
plt.subplot(232), plt.imshow(replicate, 'gray'), plt.title('REPLICATE')
plt.subplot(233), plt.imshow(reflect, 'gray'), plt.title('REFLECT')
plt.subplot(234), plt.imshow(reflect101, 'gray'), plt.title('REFLECT_101')
plt.subplot(235), plt.imshow(wrap, 'gray'), plt.title('WRAP')
plt.subplot(236), plt.imshow(constant, 'gray'), plt.title('CONSTANT')

plt.show()

 

 

數值計算

import cv2
img=cv2.imread("d:/image0.JPG")
img_flower=img+10 #所有通道數值+10
print(img[:5,:,0])
print(".........................")
print(img_flower[:5,:,0])

 

 

 當數值超過256時會以%256地形式展示通道數據

print(".........................")
print((img_flower+img)[:5,:,0])

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM