opencv基礎學習筆記--圖像加載和保存

圖像加載和保存

上次咱們測試了搭建的開發環境,如今咱們詳細講一下,怎麼讀取圖片並顯示出來以及圖片的保存和攝像頭的調用python


1.什麼是圖像

計算機「看到」的圖像實際上是一個一個像素點構成的,每一個像素點都有對應的數值。 因此圖像時結構化存儲的數據信息。chrome

  • 圖像屬性:
    • 通道數目:通常的RGB圖片,通道數目(channels) 是3個(紅、綠、藍);而monochrome圖片,通道數目(channels)是1。
    • 高與寬:顧名思義,高度是圖像豎向的長度, 寬度是圖像橫向的長度
    • 像素數據:就是圖像每一個像素點的值
    • 圖像類型:圖像在計算機顯示的類型有二值圖像、灰度圖像、彩色圖像(僞彩色圖像和真彩色圖像)

2.獲取圖像的詳細信息

下面經過代碼來獲取圖像的詳細信息,包括圖像的形狀、類型、大小、數據類型和像素值。
下面是獲取圖像信息的函數:數組

def get_image_info(image):
    print("圖像的類型:", type(image))
    print("圖像的形狀:", image.shape)
    print("圖像的大小:", image.size)
    print("圖像的數據類型:", image.dtype)
    pixel_data = np.array(image)
    print("圖像的像素值:", pixel_data)

完整代碼:ide

import cv2 as cv
import numpy as np


def get_image_info(image):
    print("圖像的類型:", type(image))
    print("圖像的形狀:", image.shape)
    print("圖像的大小:", image.size)
    print("圖像的數據類型:", image.dtype)
    pixel_data = np.array(image)
    print("圖像的像素值:", pixel_data)

print("----------hello python----------")
src = cv.imread("E:/image.jpg")  # 讀取圖像,注意使用本身圖像的路徑
get_image_info(src)  # 獲取傳入圖像的詳細信息
cv.waitKey(0)  # 等待鍵盤輸入,目的是讓程序停在這裏不立刻關閉
cv.destroyAllWindows()  # 銷燬該程序下的全部窗口

下面是我測試獲得的結果: blog_opencv0109函數

從運行的結果能夠看出,這個圖像的類型是numpy.ndarray,這是python中numpy庫裏面的多維數組, 圖像形狀是(613, 573, 3),說明圖像的高度是613,寬度是573,通道數是3。圖像的大小是1053747,這個數據是由以前的圖像形狀計算而來,6135733=1053747,由1053747個像素組成。圖像的數據是uint8格式的,每一個像素點所佔的大小是無符號8位的。圖像的像素值在圖中能夠看到是有許多0到255之間的數構成的三維數組。測試

3.獲取攝像頭的畫面

攝像頭代碼:ui

def video_demo():
    capture = cv.VideoCapture(0)  # 打開攝像頭設備,參數爲0表示使用第一個設備,若是有多個設備能夠修改參數,選擇使用的設備
    while True:
        ret, frame = capture.read()  # ret表示返回的信息,frame表示視頻中的每一幀
        frame = cv.flip(frame, 1)
        """
            翻轉    0:沿X軸翻轉(垂直翻轉)   
                大於0:沿Y軸翻轉(水平翻轉)   
                小於0:先沿X軸翻轉,再沿Y軸翻轉,等價於旋轉180°
        若是不加這一句代碼,攝像頭顯示的畫面是相反的,能夠試一試效果
        """
        cv.imshow("video", frame)  # 使用一個窗口來顯示攝像頭的內容
        c = cv.waitKey(50)  # 等待50毫秒
        if c == 27:  # 27對應ASCII中的ESC,若是鍵盤輸入ESC鍵,則會退出整個循環
            break

完整代碼:3d

import cv2 as cv
import numpy as np


def video_demo():
    capture = cv.VideoCapture(0)  # 打開攝像頭設備,參數爲0表示使用第一個設備,若是有多個設備能夠修改參數,選擇使用的設備
    while True:
        ret, frame = capture.read()  # ret表示返回的信息,frame表示視頻中的每一幀
        frame = cv.flip(frame, 1)
        """
            翻轉    0:沿X軸翻轉(垂直翻轉)   
                大於0:沿Y軸翻轉(水平翻轉)   
                小於0:先沿X軸翻轉,再沿Y軸翻轉,等價於旋轉180°
        若是不加這一句代碼,攝像頭顯示的畫面是相反的,能夠試一試效果
        """
        cv.imshow("video", frame)  # 使用一個窗口來顯示攝像頭的內容
        c = cv.waitKey(50)  # 等待50毫秒
        if c == 27:  # 27對應ASCII中的ESC,若是鍵盤輸入ESC鍵,則會退出整個循環
            break


print("----------hello python----------")
video_demo()
cv.waitKey(0)
cv.destroyAllWindows()

測試結果:code

blog_opencv0110

能夠按ESC鍵以後,按0鍵結束程序,或者直接點擊pycharm中的紅色中止按鈕中止程序。視頻

4.將讀取的圖片轉換爲灰色圖片並保存圖片

保存圖片的操做很簡單,只需幾行代碼

print("----------hello python----------")
src = cv.imread("E:/image.jpg")
cv.imshow("input image", src)
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)  # 轉化爲灰色
cv.imwrite("E:/image1.jpg", gray)  # 保存圖片
cv.waitKey(0)
cv.destroyAllWindows()

保存的圖片在E盤的根目錄下 效果以下: blog_opencv0111

相關文章
相關標籤/搜索