OpenCV基礎操作指南之圖片的讀取與寫出

1、進行圖片讀取的函數是:cv2.imread

        cv2.imread函數語法如下:

cv2.imread(filename,flag=1)

        cv2.imread函數的參數解釋:

                filename:所要讀取圖片的相對地址(與文件中open函數的讀取方式一致)

                flag:設置讀取的格式,默認為1,表示按照BGR三通道的方式進行讀取;如果為0,則以灰度圖單通道的方式讀取。

2、圖片保存的函數cv2.imwrite:

          cv2.imwrite函數語法:

cv2.imwrite(filename,img)

                cv2.imwrite函數參數解釋

                filename:要保存圖片的名字,程序的相對地址。

                img:要保存的圖片矩陣形式。

程序功能:將.py文件夾中的GBR格式圖片轉化成灰度圖。 

 程序演示:

 程序代碼:

import cv2
import numpy as np
Img=cv2.imread('1.jpg',0)
cv2.imwrite('1.jpg',Img)

如果想要改變圖片的格式,也可以在保存圖片時,將.jpg改為.png

這樣在程序運行結束後在.py文件中會發現一張與1.jpg同樣的圖片1.png。

 

import cv2
import numpy as np
Img=cv2.imread('1.jpg',0)
cv2.imwrite('1.png',Img)

這無非有是一種很好的圖片格式轉化的方法。

3、圖片的顯示函數cv2.imshow

圖片展示函數:cv2.imshow

函數cv2.imshow的語法:

cv2.imshow(name,img)

cv2.imshow函數的參數解釋:

name:展示窗口的名字

img:圖片的矩陣形式

圖片延時函數cv2.waitKey

函數cv2.waitKey語法

cv2.waitKey(time)

cv2.waitKey函數參數解釋:

time表示等待的時間,單位為毫秒。

這個函數可以這樣理解,在time時間內,計算機會等待我們鍵盤上的命令,如果在time時間內程序沒有等到按鍵指令,他會自動進入下一幀。因為這裡是圖片,沒有下一幀,所以會自動關閉窗口。

這裡需要註意的是,如果我們把time置為0,並不是等待0毫秒後進入下一幀,而是停止在當前幀,有按鍵才會進入下一幀,所以顯示單張圖片時,通常用

cv2.waitKey(0);

代碼示例:

import cv2
import numpy as np
img=cv2.imread('1.jpg',cv2.IMREAD_COLOR)
cv2.imshow('image',img)
#為瞭圖片長久的保存在程序窗口中,再加一個延時函數
cv2.waitKey(0);
cv2.imwrite('ba_ck_.png',img)
#如果使用瞭cv2.imshow函數,下面一定要跟著一個摧毀窗口的函數
cv2.destroyAllWindows()

程序改進(1):

上面這個程序中,顯示完圖片後,按下鍵盤上任意鍵,圖片都會關閉。如果我們向按下特定建關閉程序的話,可以通過一個if語句來判斷。如果按的不是q鍵,就一直處於while循環中,知道我們按下q鍵。

import cv2
import numpy as np
img=cv2.imread('1.jpg',cv2.IMREAD_COLOR)
cv2.imshow('image',img)
while 1:
    if cv2.waitKey(0)==ord('q'):
        break
    else:
        pass#continue
cv2.imwrite('ba_ck_.png',img)
#如果使用瞭cv2.imshow函數,下面一定要跟著一個摧毀窗口的函數
cv2.destroyAllWindows()

程序改進(2):

上述程序中,在我們按下q退出顯示之後,程序會自動保存,若果我們想按下q直接退出,按下s退出並保存,需要再加一個if條件語句。

import cv2
import numpy as np
img=cv2.imread('1.jpg',cv2.IMREAD_COLOR)
cv2.imshow('image',img)
while 1:
    if cv2.waitKey(0)==ord('q'):
        break
    if cv2.waitKey(0)==ord('s'):
        cv2.imwrite('ba_ck_.png',img)
        break
#如果使用瞭cv2.imshow函數,下面一定要跟著一個摧毀窗口的函數
cv2.destroyAllWindows()

附、OpenCV:讀取圖片總結

在敲這個代碼的時候,犯瞭很多錯誤,一直以為是配置出瞭問題,然後一直在排查配置,結果是路徑方式錯誤 ,,把 Mat img = imread("C:\\Users\\sq.fu\\Desktop\\pic.jpg"); 這句寫成瞭  Mat img = imread("C:\\Users\\sq.fu\\Desktop pic.jpg"); ,還好最後找出來瞭

#include <iostream>  
#include <opencv2\core\core.hpp>  
#include <opencv2\imgproc\imgproc.hpp>  
#include <opencv2\highgui\highgui.hpp>  
  
using namespace cv;  
  
void main( )  
{  
    Mat img = imread("C:\\Users\\sq.fu\\Desktop\\pic.jpg");  //  Mat img = imread("C:\\Users\\sq.fu\\Desktop\\pic.jpg");  
 
    namedWindow("test");  
   imshow("test",img);  
    waitKey(100);  
}  

總結

到此這篇關於OpenCV基礎操作指南之圖片的讀取與寫出的文章就介紹到這瞭,更多相關OpenCV圖片的讀取與寫出內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: