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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

Python 计算机视觉(三)—— 数字图像处理基本操作

發(fā)布時(shí)間:2025/3/19 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 计算机视觉(三)—— 数字图像处理基本操作 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

1. 讀取顯示圖像

(1)讀取圖像

cv2.imread() 函數(shù)

image.open() 函數(shù)

(2)顯示圖像

cv2.imshow()函數(shù)

?img.show()函數(shù)

2. 讀取修改像素

(1)讀取像素

print(img.shape)函數(shù)

print(img.size)函數(shù)

print(img)函數(shù)

使用 numpy 庫(kù)

像素值不同的原因

(2)修改像素

3. 保存圖像

(1)使用 PIL 庫(kù)

(2)使用 OpenCV 庫(kù)

4. 獲取圖像屬性

總結(jié)


1. 讀取顯示圖像

讀取顯示這部分在前面已經(jīng)記錄過(guò)了,在這里我們簡(jiǎn)單過(guò)一下:?Python 計(jì)算機(jī)視覺(二) —— OpenCV 基礎(chǔ)

(1)讀取圖像

cv2.imread() 函數(shù)

import cv2 img1 = cv2.imread('E:\Python\StudyOfOpencv\qilin1.jpeg')

注意路徑中不能包含有中文以及一些莫名其妙的空格哦 ,不然會(huì)報(bào)錯(cuò)

imread() 函數(shù)不僅僅只有一個(gè)圖像路徑的參數(shù) ,路徑后面還有一個(gè) flag 參數(shù)可以決定讀入的圖像的顏色類型

至于該參數(shù)可選取的值以及意義如下:

IMREAD_ANYCOLOR = 4?????? #讀取彩色圖像
IMREAD_ANYDEPTH = 2?????? #讀取灰度圖像
IMREAD_COLOR = 1????????????? #讀取彩色圖像
IMREAD_GRAYSCALE = 0???? #讀取灰度圖像

IMREAD_IGNORE_ORIENTATION = 128

IMREAD_LOAD_GDAL = 8

IMREAD_REDUCED_COLOR_2 = 17
IMREAD_REDUCED_COLOR_4 = 33
IMREAD_REDUCED_COLOR_8 = 65

IMREAD_REDUCED_GRAYSCALE_2 = 16
IMREAD_REDUCED_GRAYSCALE_4 = 32
IMREAD_REDUCED_GRAYSCALE_8 = 64

IMREAD_UNCHANGED = -1

至于其他的一些參數(shù)的意義可以自己去嘗試得到輸出進(jìn)行觀察

image.open() 函數(shù)

使用該方法讀取到的是圖片本身

from PIL import Image

安裝 PIL 庫(kù)時(shí)可能會(huì)報(bào)錯(cuò),試著安裝 Pillow-PIL?

from PIL import Image img2 = Image.open('E:\Python\StudyOfOpencv\qilin2.jpeg')

(2)顯示圖像

cv2.imshow()函數(shù)

使用 imread 函數(shù)讀取圖像,顯示圖像使用 cv2.imshow() 函數(shù),但需要?jiǎng)?chuàng)建顯示窗口,在窗口中顯示圖像,這些我也在前面的那篇文章中提到過(guò)

import cv2 img1 = cv2.imread('E:\Python\StudyOfOpencv\qilin1.jpeg') #讀取圖像 cv2.namedWindow("Qilin") cv2.imshow("Qilin", img1) #顯示圖像 cv2.waitKey(delay = 0)

得到圖像顯示:

?img.show()函數(shù)

使用的是 Image.open() 函數(shù)讀取圖像,則需要用該函數(shù)顯示圖像,不需要?jiǎng)?chuàng)建窗口

img.show() 中的 img 是圖像名稱,需要進(jìn)行修改

from PIL import Image img2 = Image.open('E:\Python\StudyOfOpencv\qilin2.jpeg') #讀取圖像 img2.show() #顯示圖像

使用該函數(shù)打開圖像可能會(huì)報(bào)錯(cuò),提示沒(méi)有對(duì)應(yīng)軟件打開文件

解決方法:打開設(shè)置-->應(yīng)用 --> 默認(rèn)程序 --> 選擇報(bào)錯(cuò)的文件后綴為其添加默認(rèn)的應(yīng)用軟件

得到圖像顯示:

在此處是用圖像軟件打開的,原因就是上面提到的需要為該文件添加默認(rèn)打開軟件

2. 讀取修改像素

(1)讀取像素

print(img.shape)函數(shù)

使用 cv2.imread() 函數(shù)讀取圖像后,為顯示圖像的類型以及分辨率可以使用該函數(shù)

print(img1.shape)

得到輸出:(506, 564, 3)

說(shuō)明該圖像是 564*506 的三通道 圖像,至于分辨率為什么反過(guò)來(lái)后面再說(shuō)

print(img.size)函數(shù)

使用 Image.open() 得到圖像后使用該函數(shù)輸出圖像的大小,即分辨率

print(img2.size)

得到輸出:(564, 506)

可以看出剛好和前面的是反過(guò)來(lái)的

print(img)函數(shù)

使用 cv2.imread() 函數(shù)得到的圖像要用該函數(shù)輸出像素值:

print(img1)

[[[254 251 253]
? [254 251 253]
? [254 251 253]
? ...
? [245 236 227]
? [245 236 227]
? [245 236 227]]

?[[254 251 253]
? [254 251 253]
? [254 251 253]
? ...
? [245 236 227]
? [245 236 227]
? [245 236 227]]

?[[254 251 253]
? [254 251 253]
? [254 251 253]
? ...
? [245 235 228]
? [245 235 228]
? [245 235 228]]

?...

?[[ 45? 62? 71]
? [ 44? 62? 69]
? [ 44? 61? 70]
? ...
? [ 32? 46? 42]
? [ 32? 46? 42]
? [ 32? 46? 42]]

?[[ 41? 57? 64]
? [ 41? 57? 63]
? [ 41? 57? 64]
? ...
? [ 27? 41? 37]
? [ 32? 46? 42]
? [ 31? 45? 41]]

?[[ 43? 57? 63]
? [ 43? 57? 63]
? [ 43? 57? 63]
? ...
? [ 27? 41? 37]
? [ 32? 46? 42]
? [ 31? 45? 41]]]

使用 numpy 庫(kù)

前面提到過(guò),使用 Image.open() 函數(shù)得到的圖象是原始的圖像,所以需要將它轉(zhuǎn)化為數(shù)組形式再進(jìn)行輸出得到相應(yīng)的像素點(diǎn)值

from PIL import Image import numpy as np img2 = Image.open('E:\Python\StudyOfOpencv\qilin1.jpeg') image = np.asarray(img2) print(image)

[[[253 251 254]
? [253 251 254]
? [253 251 254]
? ...
? [227 236 245]
? [227 236 245]
? [227 236 245]]

?[[253 251 254]
? [253 251 254]
? [253 251 254]
? ...
? [227 236 245]
? [227 236 245]
? [227 236 245]]

?[[253 251 254]
? [253 251 254]
? [253 251 254]
? ...
? [228 235 245]
? [228 235 245]
? [228 235 245]]

?...

?[[ 71? 62? 45]
? [ 69? 62? 44]
? [ 70? 61? 44]
? ...
? [ 42? 46? 32]
? [ 42? 46? 32]
? [ 42? 46? 32]]

?[[ 64? 57? 41]
? [ 63? 57? 41]
? [ 64? 57? 41]
? ...
? [ 37? 41? 27]
? [ 42? 46? 32]
? [ 41? 45? 31]]

?[[ 63? 57? 43]
? [ 63? 57? 43]
? [ 63? 57? 43]
? ...
? [ 37? 41? 27]
? [ 42? 46? 32]
? [ 41? 45? 31]]]

像素值不同的原因

通過(guò)兩種不同的函數(shù)得到的圖像讀取的像素剛好是反過(guò)來(lái)的這是因?yàn)?#xff1a;cv2.imread() 讀取的是 BGR 格式,而 Image.open() 讀取的是 RGB 格式,所以它們兩者的 Red&Blue 通道剛好反過(guò)來(lái)了

而且使用 cv2.imread() 函數(shù)得到的圖像本來(lái)就是經(jīng)過(guò)采樣的,所以可以直接打印分辨率,然而 image.open() 函數(shù)得到的圖像則是原本的圖像,所以需要將其轉(zhuǎn)化為數(shù)組形式才能打印分辨率

(2)修改像素

要將圖像修改為灰度圖,那么在 OpenCv 庫(kù)中使用 cvtColor() 函數(shù)就可以實(shí)現(xiàn),這在上一篇文章中提到過(guò)

但如果是使用 Image.open() 庫(kù)得到的圖像,則需要對(duì)每一個(gè)像素點(diǎn)的像素值進(jìn)行調(diào)整

img2 = Image.open('E:\Python\StudyOfOpencv\qilin1.jpeg') pix = img2.load() #導(dǎo)入像素 width = img2.size[0] #獲取寬度 height = img2.size[1] #獲取長(zhǎng)度 temp = 1 for x in range(width): #遍歷寬度temp += 1for y in range(height): #遍歷長(zhǎng)度if temp % 2 == 0: #每隔一個(gè)像素點(diǎn)轉(zhuǎn)化為一個(gè)白點(diǎn)img2.putpixel((x, y), (255, 255, 255)) img2.show()

得到圖像如上?

3. 保存圖像

(1)使用 PIL 庫(kù)

(之前的圖案因?yàn)椴幻髟蜻`規(guī)取消了,現(xiàn)在換個(gè)圖片,但愿不會(huì)再次違規(guī))

對(duì)于上面的得到的圖像使用 img2.save() 函數(shù)就可以進(jìn)行保存:

img2.save('E:\Python\StudyOfOpencv\qilin1_1.jpeg')

?(2)使用 OpenCV 庫(kù)

首先我們將圖像轉(zhuǎn)化為灰度圖像:

img1 = cv2.imread('E:\Python\StudyOfOpencv\qilin1.jpeg') cv2.namedWindow("Qilin") img_gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) #對(duì)圖像進(jìn)行灰度處理 cv2.imshow("Qilin", img_gray)

得到的灰度圖像如下:?

?再將其保存:?

cv2.imwrite('E:\Python\StudyOfOpencv\qilinone.jpeg', img_gray)

如果報(bào)錯(cuò)了檢查一下是否在保存路徑中忘了添加圖像后綴?

4. 獲取圖像屬性

使用 cv2.imread() 函數(shù)讀取圖像后,為顯示圖像的類型以及分辨率可以使用 print(img.shape), 前面提到過(guò),這里就不贅述了

也提到過(guò) print(img.size) 當(dāng)然這適用于使用 Image.open() 得到的圖像

總結(jié)

這篇文章主要承接了上一篇文章 —— OpenCV 基礎(chǔ),記錄了其他的幾種顯示圖像,保存圖像、觀察圖像特性的方法,主要也是為后面的學(xué)習(xí)打下基礎(chǔ)

總結(jié)

以上是生活随笔為你收集整理的Python 计算机视觉(三)—— 数字图像处理基本操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。