opencvpython圖片
Ⅰ python OpenCV視頻拆分圖片代碼
# coding:utf-8
import cv2
import numpy as np
import os
print("1")
vc = cv2.VideoCapture("123.mp4")
C = 1
print("2")
if vc.isOpened():
rVal, frame = vc.read()
else:
print("3")
rVal = False
while rVal:
print(C)
if C % 1000 == 0: # every 5 fps write frame to img
path='./image/'+str(C)+'.jpg'
cv2.imwrite(path, frame)
# cropped001 = frame2[0:300,300:600] #y change from 0 to 300 x change from 300 to 600
# cv2.im write('./cropped/'+str(c)+'001.jpg',cropped001)
print(C)
cv2.waitKey(1)
C = C + 1
vc.release()
Ⅱ 為什麼用Python的openCV讀取圖片與PIL讀取的圖片像素值會不一樣
經測試,同一張圖片,使用 PIL和 OpenCv庫讀取的數據是一樣的(經過BGR轉成RGB):
建議:可以嘗試更新 PIL或是 OpenCv庫。
本機測試環境: Python 3.7+Pillow 6.2 +opencv-python 4.1
Ⅲ python opencv如何存圖片到指定路徑按圖上的會存到python_work文件夾
如圖,修改倒數第四行的內容為:
cv2.imwrite('F:/xxx/yyy/' + str(c) + '.jpg', frame)
即可將圖片存儲到 F 盤的 xxx\yyy 目錄中,這里按照你的需要修改即可
Ⅳ 基於Python的opencv從csv文件中讀取圖片的問題
報錯異常說明
參數類型不正確
Ⅳ python3中如何載入圖片
答: 如下所示。
- 可利用opencv-Python介面,使用imread()函數,那麼導入名為example的圖片的例子如下所示。
import cv2
image = cv2.imread('./example.png')
- 也可以使用matplotlib.pyplot中的pyplot模塊,具體例子如下所示。
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
image = mpimg.imread('./example.png')
print image.shape
plt.imshow(image) #調用imshow函數
在這里只是說了兩種方法,希望能夠幫助到你。
Ⅵ opencv和python下,對圖片的讀取程序報錯如何解決
1、需要用到其他模塊的函數,如:
for i in range(20) #循環次數
image=cv2.imread("D:\picture\%d.jpg"%(i))#路徑自己選擇。
2、可以先升級你的pip,另外看看你的版本是否匹配,包括py版本和32位64位。
3、關於python下使用opencv讀取圖像。首先需要導入opencv包,上面說的那個Ipython並沒有opencv包,所以想使用的請先正確導入opencv包再說,至於怎麼導入,先下載個opencv包,裡面有關於python的opencv包。
以下照片是關於Ipython的運行界面:
Ⅶ 使用OpenCV和Python進行圖像拼接
么是圖像拼接呢?簡單來說,對於輸入應該有一組圖像,輸出是合成圖像。同時,必須保留圖像之間的邏輯流。
首先讓我們了解圖像拼接的概念。基本上,如果你想捕捉一個大的場景,你的相機只能提供一個特定解析度的圖像(如:640×480),這當然不足以捕捉大的全景。所以,我們可以做的是捕捉整個場景的多個圖像,然後把所有的碎片放在一起,形成一個大的圖像。這些有序的照片被稱為全景。獲取多幅圖像並將其轉換成全景圖的整個過程稱為圖像拼接。
首先,需要安裝opencv 3.4.2.16。
接下來我們將導入我們將在Python代碼中使用的庫:
在我們的教程中,我們將拍攝這張精美的照片,我們會將其分成兩張左右兩張照片,然後我們會嘗試拍攝相同或非常相似的照片。
因此,我將此圖像切成兩個圖像,它們會有某種重疊區域:
在此,我們將列出我們應採取的步驟,以取得最終的結果:
因此,從第一步開始,我們將導入這兩個圖像並將它們轉換為灰度,如果您使用的是大圖像,我建議您使用cv2.resize,因為如果您使用較舊的計算機,它可能會非常慢並且需要很長時間。如果要調整圖像大小,即調整50%,只需將fx = 1更改為fx = 0.5即可。
我們還需要找出兩幅圖像中匹配的特徵。我們將使用opencv_contrib的SIFT描述符。SIFT (Scale constant Feature Transform)是一種非常強大的OpenCV演算法。這些最匹配的特徵作為拼接的基礎。我們提取兩幅圖像的關鍵點和sift描述符如下:
kp1和kp2是關鍵點,des1和des2是圖像的描述符。如果我們用特徵來畫這幅圖,它會是這樣的:
左邊的圖像顯示實際圖像。右側的圖像使用SIFT檢測到的特徵進行注釋:
一旦你有了兩個圖像的描述符和關鍵點,我們就會發現它們之間的對應關系。我們為什麼要這么做?為了將任意兩個圖像連接成一個更大的圖像,我們必須找到重疊的點。這些重疊的點會讓我們根據第一幅圖像了解第二幅圖像的方向。根據這些公共點,我們就能知道第二幅圖像是大是小還是旋轉後重疊,或者縮小/放大後再fitted。所有此類信息的產生是通過建立對應關系來實現的。這個過程稱為registration。
對於匹配圖像,可以使用opencv提供的FLANN或BFMatcher方法。我會寫兩個例子證明我們會得到相同的結果。兩個示例都匹配兩張照片中更相似的特徵。當我們設置參數k = 2時,這樣我們就要求knnMatcher為每個描述符給出2個最佳匹配。「matches」是列表的列表,其中每個子列表由「k」個對象組成。以下是Python代碼:
FLANN匹配代碼:
BFMatcher匹配代碼:
通常在圖像中,圖像的許多地方可能存在許多特徵。所以我們過濾掉所有的匹配來得到最好的。因此我們使用上面得到的前2個匹配項進行比值檢驗。如果下面定義的比值大於指定的比值,則考慮匹配。
現在我們定義在圖像上繪制線條的參數,並給出輸出以查看當我們在圖像上找到所有匹配時的樣子:
這是輸出的匹配圖像:
這部分完整Python代碼:
因此,一旦我們獲得了圖像之間的最佳匹配,我們的下一步就是計算單應矩陣。如前所述,單應矩陣將與最佳匹配點一起使用,以估計兩個圖像內的相對方向變換。
在OpenCV中估計單應性是一項簡單的任務,只需一行代碼:
在開始編碼拼接演算法之前,我們需要交換圖像輸入。所以img_現在會取右圖像img會取左圖像。
那麼讓我們進入拼接編碼:
因此,首先,我們將最小匹配條件count設置為10(由MIN_MATCH_COUNT定義),並且只有在匹配良好的匹配超出所需匹配時才進行拼接。否則,只需顯示一條消息,說明匹配不夠。
因此,在if語句中,我們將關鍵點(從匹配列表)轉換為findHomography()函數的參數。
只需在這段代碼中討論cv2.imshow(「original_image_overlapping.jpg」,img2),我們就會顯示我們收到的圖像重疊區域:
因此,一旦我們建立了單應性,我們需要扭曲視角,我們將以下單應矩陣應用於圖像:
所以我們使用如下:
在上面兩行Python代碼中,我們從兩個給定的圖像中獲取重疊區域。然後在「dst」中我們只接收到沒有重疊的圖像的右側,因此在第二行代碼中我們將左側圖像放置到最終圖像。所以在這一點上我們完全拼接了圖像:
剩下的就是去除圖像的黑色,所以我們將編寫以下代碼來從所有圖像邊框中刪除黑邊:
這是我們調用修剪邊界的最終定義函數,同時我們在屏幕上顯示該圖像。如果您願意,也可以將其寫入磁碟:
使用上面的Python代碼,我們將首先收到原始圖片:
這是完整的最終代碼:
在本教程中,我們學習了如何使用OpenCV執行圖像拼接和全景構造,並編寫了最終的圖像拼接代碼。
我們的圖像拼接演算法需要四個主要步驟:檢測關鍵點和提取局部不變描述符; 獲得圖像之間的匹配描述符; 應用RANSAC估計單應矩陣; 使用單應矩陣應用warping transformation。
當僅為兩個圖像構建全景圖時,該演算法在實踐中工作良好。
Ⅷ 基於python語言的opencv如何把圖片中指定區域截取出來
3-切割輪廓
(這是我網站找的一篇 blog, 親測有效)