日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数字图像的加载、显示和输出

發布時間:2025/3/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数字图像的加载、显示和输出 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

圖像處理的最基本工作,也是第一步工作:讀取、顯示和輸出圖片。

1.圖像讀取

opencv圖像讀取的函數是:imread(圖像路徑,加載模式);輸入參數有2個:

  • “圖像路徑”是一個字符串;使用絕對路徑和相對路徑都是可以的,但相對路徑必須是程序的工作路徑。一般的圖像格式都是支持的,如bmp,jpg,png,tiff等。
  • “讀取模式”是一個枚舉型的整數,用于指定讀取圖像的顏色類型。缺省值是1,一般在調用時我們可以不輸入這個參數,默認值1表示載入三通道的彩色圖像。有如下取值:
    • IMREAD_UNCHANGED:取值:-1。不改變原始圖像的讀取模式。
    • IMREAD_GRAYSCALE:取值:0。將圖像轉換成灰度圖讀取。
    • IMREAD_COLOR:取值:1。為默認缺省值,將圖像轉換成3通道彩色圖像讀取。
    • IMREAD_ANYDEPTH:取值:2。讀取后是灰度圖。這個沒搞明白是什么意思。知道的朋友不妨留言指教,不甚感激。
    • IMREAD_ANYCOLOR:取值:4。無損讀取原始圖像。源圖像為彩色圖像就讀取為3通道彩色圖像,源圖像為灰度圖就讀取為灰度圖。
  • 為更一步準確掌握這些參數的區別,用3幅圖像測試下,這三幅圖像分別為:”scooter.png” :帶alpha通道的彩色圖像; “lenna.bmp”:3通道彩色圖像; “moon.bmp”:灰度圖像。如下圖所示:

    import cv2scooter_path = "scooter.png" # 帶alpha通道的彩色圖像 lenna_path = "lenna.bmp" # 3通道彩色圖像 moon_path = "moon.bmp" # 灰度圖像pic = [scooter_path, lenna_path, moon_path]for p in pic:for i in [-1, 0, 1, 2, 4]: # 加載模式的取值img = cv2.imread(p, i)print(p, i, img.shape)

    輸出結果:

    scooter.png -1 (512, 512, 4) scooter.png 0 (512, 512) scooter.png 1 (512, 512, 3) scooter.png 2 (512, 512) scooter.png 4 (512, 512, 3) lenna.bmp -1 (512, 512, 3) lenna.bmp 0 (512, 512) lenna.bmp 1 (512, 512, 3) lenna.bmp 2 (512, 512) lenna.bmp 4 (512, 512, 3) moon.bmp -1 (640, 662) moon.bmp 0 (640, 662) moon.bmp 1 (640, 662, 3) moon.bmp 2 (640, 662) moon.bmp 4 (640, 662)

    我們可以從讀入圖像后的shape中看出一些端倪。

    • 當取值為-1時,即讀取模式為IMREAD_UNCHANGED時,源圖像是什么樣就是什么樣。
    • 當取值為0時,即讀取模式為IMREAD_GRAYSCALE時,都讀取成灰度圖像。
    • 當取值為1時,即讀取模式為IMREAD_COLOR時,不管源圖像是什么,都轉換成3通道圖像。
    • 當取值為2時,即讀取模式為IMREAD_ANYDEPTH時,都讀取成了灰度圖,沒搞明白與上面的IMREAD_GRAYSCALE有什么區別。
    • 當取值為4時,即讀取模式為IMREAD_ANYCOLOR時,源圖像為彩色圖像就讀取為3通道彩色圖像,源圖像為灰度圖就讀取為灰度圖。

    一般來說,將圖像讀取成統一的模式對于后續的處理非常重要,一般都使用3通道的彩色圖像進行處理,所以默認值是1,即不管源圖像是什么,統一轉成3通道的圖像。對于灰度圖,也是3通道,只不過每個通道的值都相等。

    如果需要特殊處理,例如只處理灰度圖,或需要alpha通道,那么就可以靈活使用其它的讀取模式。

    2.圖像顯示

    import cv2 lenna_path = "lenna.bmp" img = cv2.imread(lenna_path) cv2.imshow('lenna', img) cv2.waitKey()

    opencv中的圖像顯示函數是imshow(title,img),title是顯示圖片的窗口標題,img就是要顯示的圖像。如果不添最后一句cv2.waitKey(),執行時窗口是一閃而過。waitKey()表示無限等待。中間可以輸入數值,如5000,cv2.waitKey(5000),表示5000毫秒即5秒后自動關閉窗口。

    lenna_path = "lnnea.bmp" img = cv2.imread(lenna_path) cv2.imshow('lenna', img) cv2.waitKey()

    輸出:

    error: (-215) size.width>0 && size.height>0 in function cv::imshow

    從報錯信息可以推斷,是圖像的size有問題,即沒有得到圖像的size。換句話說就是沒有讀取到源圖像。仔細檢查發現是文件名弄錯了。

    這里需要注意,調用imread(),就算圖像的路徑是錯的,或者沒有這張圖片, 也不會報錯,但得到的是None。接著往下使用imshow()顯示的話就會報錯。
    所以下次看到這個size的報錯信息,一定是圖片路徑或圖片名稱錯了。

    opencv對多個圖片輸出在同一個窗口并沒有直接的支持手段,但有時候我們會有這個需求,這時使用matplotlib搭配使用比較合適,這個以后再說。

    3.圖像輸出

    lenna_path = "Input\\lenna.bmp" img = cv2.imread(lenna_path) cv2.imwrite('Output\\lenna.jpg', img)

    opencv中的圖像輸出函數是imwrite(path, img);path是輸出圖片的路徑和名稱,格式轉換在這里只需要換個后綴名即可。img就是要保存的圖像。

    需要注意的是,如果輸出時,指定的輸出目錄不存在,例如不存在Output目錄,imwrite()不會報錯,但也不會自動創建目錄然后輸出。這樣做的結果是什么也沒有發生。

    總結

    以上是生活随笔為你收集整理的数字图像的加载、显示和输出的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。