OpenCV讀取與寫入圖片的實(shí)現(xiàn)
1.讀取圖片
cv2.imread(filename, flags)
- -filename: 文件名稱
- -flags: 0 讀入灰度圖片,1 讀入彩色圖片
cv2.imshow(winname, mat)
- -winname: 窗口名字
- -mat: 要展示的圖片矩陣
cv2.waitKey(0):暫停程序,這樣才能顯示圖片
import cv2
img = cv2.imread("img.jpg", 1)
cv2.imshow('img', img)
cv2.waitKey(0)

2.圖片寫入
讀取圖片要經(jīng)歷四個(gè)步驟:
1.文件的讀取
2.封裝格式解析(jpg,png等格式)
3.數(shù)據(jù)解碼
4.數(shù)據(jù)加載
這樣讀取的圖片為圖片的原始數(shù)據(jù)
cv2.imwrite(filename, img)
- -filename: 圖片名稱
- -img: 圖片數(shù)據(jù)
import cv2
img = cv2.imread("img.jpg", 1)
cv2.imwrite('img1.jpg', img)
True
2.1圖像質(zhì)量
1.jpg圖片文件是以圖片質(zhì)量為代價(jià)進(jìn)行壓縮的,屬于有損壓縮
cv2.IMWRITE_JPEG_QUALITY: 表示當(dāng)前的圖片質(zhì)量,壓縮范圍為0-100,不同壓縮比對(duì)應(yīng)不同的圖片大小,下面我們來體驗(yàn)一下:
import cv2
img = cv2.imread("img.jpg", 1)
cv2.imwrite('imgTest.jpg', img, [cv2.IMWRITE_JPEG_QUALITY, 0])
True
原圖像如下:

圖片大小為400kb
壓縮之后的圖片為:

圖片大小為40kb, 同時(shí)出現(xiàn)了嚴(yán)重的馬賽克現(xiàn)象
import cv2
img = cv2.imread("img.jpg", 1)
cv2.imwrite('imgTest2.jpg', img, [cv2.IMWRITE_JPEG_QUALITY, 50])
True
壓縮之后的圖片為:

圖片大小為200kb,馬賽克現(xiàn)象沒那么的嚴(yán)重
2.png圖片格式的壓縮屬于無損壓縮,可以設(shè)置透明度
import cv2
img = cv2.imread("img.jpg", 1)
cv2.imwrite('imgTest1.png', img)
True
import cv2
img = cv2.imread("img.jpg", 1)
cv2.imwrite('imgTest2.png', img, [cv2.IMWRITE_PNG_COMPRESSION, 0])
True
壓縮之后的圖像為:

圖片大小為:5.92MB
import cv2
img = cv2.imread("img.jpg", 1)
cv2.imwrite('imgTest3.png', img, [cv2.IMWRITE_PNG_COMPRESSION, 50])
True
圖像大小變?yōu)?.34MB
由此可知,jpg圖片文件圖像質(zhì)量的數(shù)值越低,壓縮比越高,png圖片文件圖像質(zhì)量的數(shù)值越低,壓縮比越低
3.像素
像素:是指組成圖像的小方格
RGB: 每一種顏色都是由RGB(red, green, blue)三種顏色組合而成的
顏色深度:比如,8bit 表示每種顏色的范圍是0~255, 所以總共有256^3中顏色
圖像寬高:表示在水平方向和豎直方向的像素點(diǎn)的個(gè)數(shù)
未壓縮圖片的計(jì)算方法: w * h * 顏色通道(3) * 8 bit / 8(B)
3.1像素讀取與寫入
每一個(gè)像素點(diǎn)都有3各部分組成,一般情況下,圖片存儲(chǔ)的格式為RGB, 但是opecv讀取的圖片為BGR格式
我們將圖片的左上角的一列變?yōu)樗{(lán)色
import cv2
img = cv2.imread('img.jpg', 1)
(b, g, r) = img[100, 100] # 讀取像素值
print(b, g, r)
#10,100 --- 110, 100
for i in range(1, 1000):
img[10 + i][100] = (255, 0, 0)
cv2.imshow('imageBlue.png', img)
cv2.waitKey(0)
59 54 129
True

到此這篇關(guān)于OpenCV讀取與寫入圖片的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)OpenCV讀取與寫入圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
手把手教你pycharm專業(yè)版安裝破解教程(linux版)
這篇文章主要介紹了 手把手教你pycharm專業(yè)版安裝破解教程(linux版),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Python中的并發(fā)處理之a(chǎn)syncio包使用的詳解
本篇文章主要介紹了Python中的并發(fā)處理之a(chǎn)syncio包使用的詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04
基于Python實(shí)現(xiàn)圖片一鍵切割九宮格的工具
有時(shí)候發(fā)微博時(shí)候,需要裁切圖片為九宮格,但是ps或者其他工具都太麻煩。本文就來用Python編寫一個(gè)一鍵切割九宮格的工具,希望對(duì)大家有所幫助2023-03-03
Python調(diào)用AnythingLLM API使用流輸出的實(shí)現(xiàn)
本文主要介紹了Python調(diào)用AnythingLLM API使用流輸出的實(shí)現(xiàn),用于處理長文本或?qū)崟r(shí)交互場(chǎng)景,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-03-03
2021年的Python 時(shí)間軸和即將推出的功能詳解
這篇文章主要介紹了2021年的Python 時(shí)間軸和即將推出的功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
Python?Pandas教程之series 上的轉(zhuǎn)換操作
這篇文章主要介紹了Python?Pandas教程之series上的轉(zhuǎn)換操作,文章通過圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
Python基于模塊Paramiko實(shí)現(xiàn)SSHv2協(xié)議
這篇文章主要介紹了Python基于模塊Paramiko實(shí)現(xiàn)SSHv2協(xié)議,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04

