導航:首頁 > 編程語言 > pythonopencvsave

pythonopencvsave

發布時間:2023-05-15 05:26:53

python可以用來處理圖像嗎

可以的,
PythonWare公司提供了免費的Python圖像處理工具包PIL(Python Image Library),該軟體包提供了基本的圖像處理功能,如:

改變圖像大小,旋轉圖像,圖像格式轉換,色場空間轉換,圖像增強,直方圖處理,插值和濾波等等。雖然在這個軟體包上要實現類似MATLAB中的復雜的圖像處理演算法並不太適合,但是Python的快速開發能力以及面向對象等等諸多特點使得它非常適合用來進行原型開發。

在PIL中,任何一副圖像都是用一個Image對象表示,而這個類由和它同名的模塊導出,因此,最簡單的形式是這樣的:

import Image img = Image.open(「dip.jpg」)
注意:第一行的Image是模塊名;第二行的img是一個Image對象;
Image類是在Image模塊中定義的。關於Image模塊和Image類,切記不要混淆了。現在,我們就可以對img進行各種操作了,所有對img的
操作最終都會反映到到dip.img圖像上。

PIL提供了豐富的功能模塊:Image,ImageDraw,ImageEnhance,ImageFile等等。最常用到的模塊是
Image,ImageDraw,ImageEnhance這三個模塊。下面我對此分別做一介紹。關於其它模塊的使用請參見說明文檔.有關PIL軟體包和
相關的說明文檔可在PythonWare的站點www.Pythonware.com上獲得。

Image模塊:

Image模塊是PIL最基本的模塊,其中導出了Image類,一個Image類實例對象就對應了一副圖像。同時,Image模塊還提供了很多有用的函數。

(1)打開一文件:
import Image img = Image.open(「dip.jpg」)

這將返回一個Image類實例對象,後面的所有的操作都是在img上完成的。

(2)調整文件大小:

import Image img = Image.open("img.jpg") new_img = img.resize
((128,128),Image.BILINEAR) new_img.save("new_img.jpg")

原來的圖像大小是256x256,現在,保存的new_img.jpg的大小是128x128。

就是這么簡單,需要說明的是Image.BILINEAR指定採用雙線性法對像素點插值。

在批處理或者簡單的Python圖像處理任務中,採用Python和PIL(Python Image Library)的組合來完成圖像處理任務是一個很不錯的選擇。設想有一個需要對某個文件夾下的所有圖像將對比度提高2倍的任務。用Python來做將是十分簡單的。當然,我也不得不承認Python在圖像處理方面的功能還比較弱,顯然還不適合用來進行濾波、特徵提取等等一些更為復雜的應用。我個人的觀點是,當你要實現這些「高級」的演算法的時候,好吧,把它交給MATLAB去完成。但是,如果你面對的只是一個通常的不要求很復雜演算法的圖像處理任務,那麼,Python圖像處理應該才是你的最佳搭檔。

Ⅱ python opencv 顯示圖片 未響應

同樣新手遇到這個問題,然後在別的地方看到的:opencv裡面imshow函數窗口只顯示一下就沒了,如果想要一直顯示,就需要兩句話:
cv2.waitKey()
cv2.destroyAllWindows()
我的就是,加進去這兩句話就好了
給個我的例子(創建個黑圖,然後讀取,改左上角第一個像素變白):
img=np.zeros((30,30),dtype=np.uint8)
img=cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
cv2.imwrite('random.png',img)
img_1=cv2.imread('random.png')
img_1[0,0]=[255,255,255]
cv2.imshow('img_1',img_1)
cv2.waitKey()
cv2.destroyAllWindows()

Ⅲ python opencv怎麼消除眼鏡反光

使用悶攜cv2.cv的LoadImage、ShowImage和SaveImage函數
import cv2.cv as cv
# 讀圖液腔片
image=cv.LoadImage('img/image.png'鬧罩衫, cv.CV_LOAD_IMAGE_COLOR)#Load the image
#Or just: image=cv.LoadImage('img/image.png')
cv.NamedWindow('a_window', cv.CV_WINDOW_AUTOSIZE) #Facultative
cv.ShowImage('a_window', image) #Show the image
# 寫圖片
cv.SaveImage("thumb.png", thumb)
cv.WaitKey(0) #Wait for user input and quit

Ⅳ Opencv用Python實現灰度圖

請題主把兩張圖上傳上來。具體方法:是上傳到網路網盤然後鏈接貼過來

Ⅳ 讀取圖片

python基礎——讀取圖片

圖像後綴名的轉換:

要注意的是:對於彩色圖像,不管其格式是png,還是bmp,或者jpg,

在PIL中 ,使用Image模塊的open()函數打開後,返回的圖像對象的模式都是毀型 RGB ,對於灰度圖像,不管其圖像格式是PNG,還是BMP,JPG,打開後,其模式為灰度L。

PNG BMP JPG彩色圖像格式之間的轉換:可以通過Image模塊的open函數和save函數,具體來說,在打開這些圖像時,PIL會將他們解碼成三通道的RGB圖像。用戶可以基於RGB進行處理。處理完畢後可以將其處理結果保存成PNG BMP JPG中任何格式。

PNG BMP JPG灰度圖像格式之間的轉換,同理也可以通過類似途徑,只是解碼後時模式為L的圖像。

python庫可以用來讀取圖片的庫

1. PIL.Image.open  

無論是jpg還是png都能准確讀取,PIL.Image.open 不直接返回numpy對象,可以用numpy提供的函數進行轉換;

其他模塊都直接返回numpy.ndarray對象,通道順序為RGB,通道值得默認范圍為0-255。

拓展:

利用PIL中的Image函數讀取出來不是array格式,這時候需要用消困np.asarray() 或者np.array()函數 。

區別:np.array() 是深拷貝,np.asarray() 是淺拷貝

關於深拷貝和淺拷貝,這里給出一個說明:

Python 中的對象之間賦值時是按引用傳遞的,如果需要拷貝對象,需要使用標准庫中的模塊。

1. . 淺拷貝 只拷貝父對象,不會拷貝對象的內部的子對象。

2. .deep 深拷貝 拷貝對象及其子對象

一個很好的例子:

2. cv2.imread

使用opencv讀取圖像,直接返回numpy.ndarray 對象,通道順序為BGR ,注意是BGR,通道值默認范圍0-255

cv2.imread():讀入圖片,共兩個參數:第一個參數為要讀入的圖片文件名,第二個參數為如何讀取圖片(cv2.IMREAD_COLOR:讀入一副彩色圖片;cv2.IMREAD_GRAYSCALE:灰度圖片;cv2.IMREAD_UNCHANGED:讀入一幅圖片,並包括其alpha通道。)

cv2.imread()不能有中文路徑,否則讀取不出來

cv2.imread() 讀出來同樣是array形式,但是如果是單通道的圖,讀出來的是三通道的。

3. matplotlib.image.imread

用於顯示圖片matplotlib 用於讀取圖片並且讀取出來就是array格式

解決使用plt.savefig 保存圖片時一片空白 : 在plt.show() 之前調用 plt.savefig();

4. scipy.ndimage.imread

scipy.ndimage.imread(*args, **kwds)   Use ``matplotlib.pyplot.imread`` instead.

 Returns:imread:ndarray(多維數組)

5. scipy.misc.imread

scipy.misc.imread(name, flatten=False, mode=None)

Use ``imageio.imread`` instead.

返回:imread: ndarray。通過讀取圖像獲得的陣列 。讀出來是array 形式,並且按照(H,拿余念W,C)形式保存

4. skimage.io.imread

scikit-image和numpy,matplotlib,scikit-learn等包都是Scipy項目的成員,通用numpy數組作為基本數據格式。在python中載入包名為skimage:所得即為numpy數組。

io.imread讀出圖片格式是uint8(unsigned int);value是numpy array;圖像數據是以RGB的格式進行存儲的,通道值默認范圍0-255。

Ⅵ python讀取保存多幀圖片數量少了

cv2.imshow("left", img_left)
filename3=str(number)+'n3'+'.jpg' #列印第number張圖片+增值方式+保悄賣清存類型
cv2.imwrite(savedpath + filename3, img_left)

"""
# 數據增強實現
"""
import cv2
import numpy as np
import os

# 圖像平移
def img_translation(image):
# 圖像平移 下、上、右、左平移
M = np.float32([[1, 0, 0], [0, 1, 100]])
img_down = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))

M = np.float32([[1, 0, 0], [0, 1, -100]])
img_up = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))

M = np.float32([[1, 0, 100], [0, 1, 0]])
img_right = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))

M = np.float32([[1, 0, -100], [0, 1, 0]])
img_left = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))

# 保存圖片,需要保存上述的哪一圖片,就在cv2.imwrite()中,將哪一圖片名放入。
# filename='xxx' +'.jpeg'
# cv2.imwrite(savedpath + filename, img_left)

# 顯示圖形
cv2.imshow("down", img_down)
filename0=str(number)+'n0'+'.jpg'
cv2.imwrite(savedpath + filename0, img_down)
cv2.imshow("up", img_up)
filename1=str(number)+'n1'+'.jpg'配裂
cv2.imwrite(savedpath + filename1, img_up)
cv2.imshow("right", img_right)
filename2=str(number)+'n2'+'.jpg'
cv2.imwrite(savedpath + filename2, img_right)
cv2.imshow("left", img_left)
filename3=str(number)+'n3'+'.jpg'
cv2.imwrite(savedpath + filename3, img_left)

# 圖像縮放
def img_scale(image):
result = cv2.resize(image, (224, 224))
cv2.imshow("啟前scale", result)

filename=str(number)+'n5'+'.jpg'
cv2.imwrite(savedpath + filename, result)

# 圖像翻轉
def img_flip(image):
# 0以X軸為對稱軸翻轉,>0以Y軸為對稱軸翻轉, <0X軸Y軸翻轉
horizontally = cv2.flip(image, 0) # 水平鏡像
vertically = cv2.flip(image, 1) # 垂直鏡像
hv = cv2.flip(image, -1) # 水平垂直鏡像

# 顯示圖形
cv2.imshow("Horizontally", horizontally)
filename1=str(number)+'n6'+'.jpg'
cv2.imwrite(savedpath + filename1, horizontally)
cv2.imshow("Vertically", vertically)
filename2=str(number)+'n7'+'.jpg'
cv2.imwrite(savedpath + filename2, vertically)
cv2.imshow("Horizontally & Vertically", hv)
filename3=str(number)+'n8'+'.jpg'
cv2.imwrite(savedpath + filename3, hv)

# 圖像旋轉
def img_rotation(image):
# 原圖的高、寬 以及通道數
rows, cols, channel = image.shape

# 繞圖像的中心旋轉
# 參數:旋轉中心 旋轉度數 scale
M = cv2.getRotationMatrix2D((cols / 2, rows / 2), 30, 1)
# 參數:原始圖像 旋轉參數 元素圖像寬高
rotated = cv2.warpAffine(image, M, (cols, rows))

# 顯示圖像
cv2.imshow("rotated", rotated)
filename1=str(number)+'n9'+'.jpg'
cv2.imwrite(savedpath + filename1, rotated)
#選裝60度
W = cv2.getRotationMatrix2D((cols / 2, rows / 2), 60, 1)
# 參數:原始圖像 旋轉參數 元素圖像寬高
rotated1 = cv2.warpAffine(image, W, (cols, rows))
cv2.imshow("rotated", rotated)
filename2=str(number)+'n12'+'.jpg'
cv2.imwrite(savedpath + filename2, rotated1)

#選裝145度
W = cv2.getRotationMatrix2D((cols / 2, rows / 2), 60, 1)
# 參數:原始圖像 旋轉參數 元素圖像寬高
rotated2 = cv2.warpAffine(image, W, (cols, rows))
cv2.imshow("rotated", rotated)
filename3=str(number)+'n13'+'.jpg'
cv2.imwrite(savedpath + filename3, rotated2)

# 圖像加噪
def img_noise(image, mean=0, var=0.001):
'''
添加高斯雜訊
mean : 均值
var : 方差
'''
image = np.array(image / 255, dtype=float)
noise = np.random.normal(mean, var ** 0.5, image.shape)
out = image + noise
if out.min() < 0:
low_clip = -1.
else:
low_clip = 0.
out = np.clip(out, low_clip, 1.0)
out = np.uint8(out * 255)

cv2.imshow("noise", out)
filename3=str(number)+'n10'+'.jpg'
cv2.imwrite(savedpath + filename3, out)

# 圖像亮度調節
def img_brightness(image):
contrast = 1 # 對比度
brightness = 100 # 亮度
pic_turn = cv2.addWeighted(image, contrast, image, 0, brightness)
# cv2.addWeighted(對象,對比度,對象,對比度)
'''cv2.addWeighted()實現的是圖像透明度的改變與圖像的疊加'''

cv2.imshow('bright', pic_turn) # 顯示圖片
filename3=str(number)+'n11'+'.jpg'
cv2.imwrite(savedpath + filename3, pic_turn)
if __name__ == '__main__':

i = 0
path = '../Data/'

print(path)
savedpath = './result_new/'

filelist = os.listdir(path)
total_num = len(filelist)

for item in filelist:
number = i + 1
i = number
print("######")
print("列印到第",i,"張圖片")
src = cv2.imread(path + item)

img_translation(src)
img_scale(src)
img_flip(src)
img_rotation(src)
img_noise(src)
img_brightness(src)

cv2.waitKey(0)
cv2.destroyAllWindows()

代碼較為繁瑣,有空之後進行優化

輸出結果

Ⅶ python不改變像素大小修改存儲空間

Python本身不支持改變像數臘素大小來修改存儲空間,但是可以使用第三方庫來實現這一功能。Pillow是一個開源的Python圖像處理庫,可以用來修改圖片的大小,從而減少存儲空間。

使用Pillow庫,可以使用resize()函數來調整圖片的大小:

from PIL import Image
img = Image.open('image.jpg')
img = img.resize((200, 200)) # 調整圖片大小為高畢哪200x200像素戚碼
img.save('image_resized.jpg') # 保存調整後的圖片

Ⅷ python怎麼實現opencv3 svm訓練模型保存和載入

在做模型訓練的時候,尤其是在訓練集上做交叉驗證,通常想要將模型保存下來,然後放到獨立的測試集上測試,下面介紹的是python中訓練模型的保存和再使用。
scikit-learn已經有了模型持久化的操作,導入joblib即可
from sklearn.externals import joblib
模型保存
>>> os.chdir("workspace/model_save")>>> from sklearn import svm>>> X = [[0, 0], [1, 1]]>>> y = [0, 1]>>> clf = svm.SVC()>>> clf.fit(X, y) >>> clf.fit(train_X,train_y)>>> joblib.mp(clf, "train_model.m")
通過joblib的mp可以將模型保存到本地,clf是訓練的分類器
模型從本地調回
>>> clf = joblib.load("train_model.m")
通過joblib的load方法,載入保存的模型。
然後就可以在測試集上測試了
clf.predit(test_X,test_y)

Ⅸ 怎樣使用Python圖像處理

Python圖像處理是一種簡單易學,功能強大的解釋型編程語言,它有簡潔明了的語法,高效率的高層數據結構,能夠簡單而有效地實現面向對象編程,下文進行對Python圖像處理進行說明。
當然,首先要感謝「戀花蝶」,是他的文章「用Python圖像處理 」 幫我堅定了用Python和PIL解決問題的想法,對於PIL的一些介紹和基本操作,可以看看這篇文章。我這里主要是介紹點我在使用過程中的經驗。
PIL可以對圖像的顏色進行轉換,並支持諸如24位彩色、8位灰度圖和二值圖等模式,簡單的轉換可以通過Image.convert(mode)函數完 成,其中mode表示輸出的顏色模式。例如''L''表示灰度,''1''表示二值圖模式等。
但是利用convert函數將灰度圖轉換為二值圖時,是採用固定的閾 值127來實現的,即灰度高於127的像素值為1,而灰度低於127的像素值為0。為了能夠通過自定義的閾值實現灰度圖到二值圖的轉換,就要用到 Image.point函數。
深度剖析Python語法功能
深度說明Python應用程序特點
對Python資料庫進行學習研究
Python開發人員對Python經驗之談
對Python動態類型語言解析

Image.point函數有多種形式,這里只討論Image.point(table, mode),利用該函數可以通過查表的方式實現像素顏色的模式轉換。其中table為顏色轉換過程中的映射表,每個顏色通道應當有256個元素,而 mode表示所輸出的顏色模式,同樣的,''L''表示灰度,''1''表示二值圖模式。
可見,轉換過程的關鍵在於設計映射表,如果只是需要一個簡單的箝位值,可以將table中高於或低於箝位值的元素分別設為1與0。當然,由於這里的table並沒有什麼特殊要求,所以可以通過對元素的特殊設定實現(0, 255)范圍內,任意需要的一對一映射關系。
示例代碼如下:
import Image # load a color image im = Image.open(''fun.jpg'') # convert to grey level image Lim = im.convert(''L'') Lim.save(''fun_Level.jpg'') # setup a converting table with constant threshold threshold = 80 table = [] for i in range(256): if i < threshold: table.append(0) else: table.append(1) # convert to binary image by the table bim = Lim.point(table, ''1'') bim.save(''fun_binary.jpg'')

IT部分通常要完成的任務相當繁重但支撐這些工作的資源卻很少,這已經成為公開的秘密。任何承諾提高編碼效率、降低軟體總成本的IT解決方案都應該進行 周到的考慮。Python圖像處理所具有的一個顯著優勢就是可以在企業的軟體創建和維護階段節約大量資金,而這兩個階段的軟體成本佔到了軟體整個生命周期中總成本 的50%到95%。
Python清晰可讀的語法使得軟體代碼具有異乎尋常的易讀性,甚至對那些不是最初接觸和開發原始項目的程序員都 能具有這樣的強烈感覺。雖然某些程序員反對在Python代碼中大量使用空格。
不過,幾乎人人都承認Python圖像處理的可讀性遠勝於C或者Java,後兩 者都採用了專門的字元標記代碼塊結構、循環、函數以及其他編程結構的開始和結束。提倡Python的人還宣稱,採用這些字元可能會產生顯著的編程風格差 異,使得那些負責維護代碼的人遭遇代碼可讀性方面的困難。轉載

Ⅹ python opencv 表示mat類型嗎

、Mat類型:矩陣類型Matrix
openCVMat維密集數據數組用處理向量矩陣、圖像、直圖等等見維數據
Mat3重要:
1、Mat mat = imread(const String* filename); 讀取圖像
2、imshow(const string frameName, InputArray mat); 顯示圖像
3、imwrite (const string& filename, InputArray img); 儲存圖像
Mat類型較CvMat與IplImage類型說更強矩陣運算能力支持見矩陣運算計算密集型應用CvMat與IplImage類型轉化Mat類型減少計算間花費
A.Mat -> IplImage
同創建圖像沒復制數據
例: // 假設Mat類型imgMat圖像數據存
IplImage pImg= IplImage(imgMat);
B.Mat -> CvMat
與IplImage轉換類似復制數據創建矩陣
例: // 假設Mat類型imgMat圖像數據存
CvMat cvMat = imgMat;

二、CvMat類型與IplImage類型:圖像類型
openCVMat類型與CvMatIplImage類型都代表顯示圖像Mat類型側重於計算數性較高openCVMat類型計算進行優化CvMatIplImage類型更側重於圖像openCV其圖像操作(縮放、單通道提取、圖像閾值操作等)進行優化
補充:IplImage由CvMat派CvMat由CvArr派即CvArr -> CvMat -> IplImage
CvArr用作函數參數論傳入CvMat或IplImage內部都按CvMat處理
1.CvMat
A.CvMat-> IplImage
IplImage* img = cvCreateImage(cvGetSize(mat),8,1);
cvGetImage(matI,img);
cvSaveImage("rice1.bmp",img);
B.CvMat->Mat
與IplImage轉換類似選擇否復制數據
Mat::Mat(const CvMat* m, bool Data=false);
openCV沒向量(vector)數據結構任何候我要表示向量用矩陣數據表示即
CvMat類型與我線性代數課程向量概念相比更抽象比CvMat元素數據類型並僅限於基礎數據類型比面創建二維數據矩陣:
CvMat* cvCreatMat(int rows ,int cols , int type);
type任意預定義數據類型比RGB或者別通道數據我便CvMat矩陣表示豐富彩圖像

2.IplImage
類型關系我說IplImage類型繼承自CvMat類型包括其變數解析圖像數據
IplImage類型較CvMat參數比depthnChannels普通矩陣類型通深度通道數同表示用32位表示RGB+Alpha.圖像處理我往往深度與通道數處理做OpenCV圖像表示種優化案
IplImage圖像另種優化變數origin----原點計算機視覺處理重要便原點定義清楚圖像源編碼格式甚至操作系統都原選取產影響彌補點openCV允許用戶定義自原點設置取值0表示原點位於圖片左角1表示左角
dataOrder參數定義數據格式IPL_DATA_ORDER_PIXELIPL_DATA_ORDER_PLANE兩種取值前者便於像素同通道數據交叉排列者表示所通道按順序平行排列
IplImage類型所額外變數都圖像表示與計算能力優化
A.IplImage -> Mat
IplImage* pImg = cvLoadImage("lena.jpg");
Mat img(pImg,0); // 0復制影像pImg與imgdata共用同記憶體位置header各自
B.IplImage -> CvMat
1:CvMat mathdr, *mat = cvGetMat( img, &mathdr );
2:CvMat *mat = cvCreateMat( img->height, img->width, CV_64FC3 );
cvConvert( img, mat );
C.IplImage*-> BYTE*
BYTE* data= img->imageData;

CvMatIplImage創建區別:
1、建立矩陣第參數行數第二參數列數
CvMat* cvCreateMat( int rows, int cols, int type );
2、建立圖像CvSize第參數寬度即列數;第二參數高度即行數 CvMat矩陣相反
IplImage* cvCreateImage(CvSize size, int depth, int channels );
CvSize cvSize( int width, int height );

IplImage內部buffer每行按4位元組齊CvMat沒限制

補充:
A.BYTE*-> IplImage*
img= cvCreateImageHeader(cvSize(width,height),depth,channels);
cvSetData(img,data,step);
//首先由cvCreateImageHeader()創建IplImage圖像制定圖像尺寸深度通道數;
//由cvSetData()根據BYTE*圖像數據指針設置IplImage圖像數據數據
//其step指定該IplImage圖像每行佔位元組數於1通道IPL_DEPTH_8U圖像step等於width

閱讀全文

與pythonopencvsave相關的資料

熱點內容
貿易pdf 瀏覽:493
dbug命令 瀏覽:351
開逛app如何加好友 瀏覽:958
ftpdos命令下載文件 瀏覽:75
華為如何打開語音伺服器 瀏覽:242
python中的idle 瀏覽:1000
五軸聯動數控編程 瀏覽:965
換一台電腦如何遠程雲伺服器 瀏覽:132
阿里雲怎麼買雲伺服器 瀏覽:664
java提取文字 瀏覽:97
阿里雲伺服器同人賬號問題 瀏覽:420
5分鍾解壓軸題 瀏覽:341
安卓桌面二級文件夾 瀏覽:188
eps文檔加密 瀏覽:261
手機怎麼做pdf 瀏覽:162
ug曲面pdf 瀏覽:279
液化氣還是壓縮氣 瀏覽:950
阿里雲公共ntp伺服器地址 瀏覽:991
金字塔學習機編程 瀏覽:684
多邊形掃描線演算法Python 瀏覽:718