溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

OpenCV基礎(chǔ)操作中圖片的讀取與寫出怎么進(jìn)行

發(fā)布時(shí)間:2022-01-10 00:33:27 來源:億速云 閱讀:186 作者:柒染 欄目:開發(fā)技術(shù)

今天給大家介紹一下OpenCV基礎(chǔ)操作中圖片的讀取與寫出怎么進(jìn)行。,文章的內(nèi)容小編覺得不錯(cuò),現(xiàn)在給大家分享一下,覺得有需要的朋友可以了解一下,希望對(duì)大家有所幫助,下面跟著小編的思路一起來閱讀吧。

1、進(jìn)行圖片讀取的函數(shù)是:cv2.imread

        cv2.imread函數(shù)語法如下:

cv2.imread(filename,flag=1)

        cv2.imread函數(shù)的參數(shù)解釋:

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

                flag:設(shè)置讀取的格式,默認(rèn)為1,表示按照BGR三通道的方式進(jìn)行讀?。蝗绻麨?,則以灰度圖單通道的方式讀取。

2、圖片保存的函數(shù)cv2.imwrite:

          cv2.imwrite函數(shù)語法:

cv2.imwrite(filename,img)

                cv2.imwrite函數(shù)參數(shù)解釋

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

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

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

 程序演示:

OpenCV基礎(chǔ)操作中圖片的讀取與寫出怎么進(jìn)行

OpenCV基礎(chǔ)操作中圖片的讀取與寫出怎么進(jìn)行

 程序代碼:

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

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

這樣在程序運(yùn)行結(jié)束后在.py文件中會(huì)發(fā)現(xiàn)一張與1.jpg同樣的圖片1.png。

OpenCV基礎(chǔ)操作中圖片的讀取與寫出怎么進(jìn)行

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

這無非有是一種很好的圖片格式轉(zhuǎn)化的方法。

3、圖片的顯示函數(shù)cv2.imshow

圖片展示函數(shù):cv2.imshow

函數(shù)cv2.imshow的語法:

cv2.imshow(name,img)

cv2.imshow函數(shù)的參數(shù)解釋:

name:展示窗口的名字

img:圖片的矩陣形式

圖片延時(shí)函數(shù)cv2.waitKey

函數(shù)cv2.waitKey語法

cv2.waitKey(time)

cv2.waitKey函數(shù)參數(shù)解釋:

time表示等待的時(shí)間,單位為毫秒。

這個(gè)函數(shù)可以這樣理解,在time時(shí)間內(nèi),計(jì)算機(jī)會(huì)等待我們鍵盤上的命令,如果在time時(shí)間內(nèi)程序沒有等到按鍵指令,他會(huì)自動(dòng)進(jìn)入下一幀。因?yàn)檫@里是圖片,沒有下一幀,所以會(huì)自動(dòng)關(guān)閉窗口。

這里需要注意的是,如果我們把time置為0,并不是等待0毫秒后進(jìn)入下一幀,而是停止在當(dāng)前幀,有按鍵才會(huì)進(jìn)入下一幀,所以顯示單張圖片時(shí),通常用

cv2.waitKey(0);

代碼示例:

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

程序改進(jìn)(1):

上面這個(gè)程序中,顯示完圖片后,按下鍵盤上任意鍵,圖片都會(huì)關(guān)閉。如果我們向按下特定建關(guān)閉程序的話,可以通過一個(gè)if語句來判斷。如果按的不是q鍵,就一直處于while循環(huán)中,知道我們按下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函數(shù),下面一定要跟著一個(gè)摧毀窗口的函數(shù)
cv2.destroyAllWindows()

程序改進(jìn)(2):

上述程序中,在我們按下q退出顯示之后,程序會(huì)自動(dòng)保存,若果我們想按下q直接退出,按下s退出并保存,需要再加一個(gè)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函數(shù),下面一定要跟著一個(gè)摧毀窗口的函數(shù)
cv2.destroyAllWindows()

附、OpenCV:讀取圖片總結(jié)

在敲這個(gè)代碼的時(shí)候,犯了很多錯(cuò)誤,一直以為是配置出了問題,然后一直在排查配置,結(jié)果是路徑方式錯(cuò)誤 ,,把 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基礎(chǔ)操作中圖片的讀取與寫出怎么進(jìn)行

以上就是OpenCV基礎(chǔ)操作中圖片的讀取與寫出怎么進(jìn)行的全部?jī)?nèi)容了,更多與OpenCV基礎(chǔ)操作中圖片的讀取與寫出怎么進(jìn)行相關(guān)的內(nèi)容可以搜索億速云之前的文章或者瀏覽下面的文章進(jìn)行學(xué)習(xí)哈!相信小編會(huì)給大家增添更多知識(shí),希望大家能夠支持一下億速云!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI