導航:首頁 > 編程語言 > python最小邊緣切圖

python最小邊緣切圖

發布時間:2022-08-02 01:11:44

A. python如何把檢測出來的邊緣畫成矩形

__author__='Administrator'importcv

defSharp(image,flag1=0,flag2=0):
w=image.width
h=image.heightsize=(w,h)
iSharp=cv.CreateImage(size,8,1)foriinrange(h-1):forjinrange(w-1):ifflag2==0:
x=abs(image[i,j+1]-image[i,j])
y=abs(image[i+1,j]-image[i,j])else:
x=abs(image[i+1,j+1]-image[i,j])
y=abs(image[i+1,j]-image[i,j+1])ifflag1==0:
iSharp[i,j]=max(x,y)else:
iSharp[i,j]=x+yreturniSharpimage=cv.LoadImage('18.jpg',0)
iMaxSharp=Sharp(image)
iAddSharp=Sharp(image,1)
iRMaxSharp=Sharp(image,0,1)
iRAddSharp=Sharp(image,1,1)
cv.ShowImage('iMaxSharp',iMaxSharp)
cv.ShowImage('image',image)
cv.ShowImage('iAddSharp',iAddSharp)
cv.ShowImage('iRAddSharp',iRAddSharp)
cv.ShowImage('iRMaxSharp',iRMaxSharp)
cv.WaitKey(0)

B. 如何用python提取圖像的邊界坐標

簡單說,兩附圖之間對應像素相減,然後求絕對值,差異大於某個特定值的就認為是不同點。(如果你的圖片是jpg壓縮,那麼由於離散餘弦變換過程去掉了高頻信息,會導致圖像顏色變化劇烈的部分出現細微鋸齒狀差異)
使用Numpy操作,np.abs(img1-img2)>thr。即可得到

C. python Tkinter編程問題

可以用這個frame的winfo_width()方法獲得實際寬度,winfo_height()可以獲得高度,比如:
fr=Frame(tk)
fr.pack(side=TOP, fill=BOTH, expand=True)
print "frame size before update: ", fr.winfo_width(), fr.winfo_height()
fr.update()
print "frame size after update: ", fr.winfo_width(), fr.winfo_height()

D. 如何用python取圖片輪廓

1、查找輪廓(find_contours)

measure模塊中的find_contours()函數,可用來檢測二值圖像的邊緣輪廓。

函數原型為:

skimage.measure.find_contours(array,level)

array: 一個二值數組圖像

level: 在圖像中查找輪廓的級別值

返回輪廓列表集合,可用for循環取出每一條輪廓。

例1:

importnumpyasnp
importmatplotlib.pyplotasplt
fromskimageimportmeasure,draw

#生成二值測試圖像
img=np.zeros([100,100])
img[20:40,60:80]=1#矩形
rr,cc=draw.circle(60,60,10)#小圓
rr1,cc1=draw.circle(20,30,15)#大圓
img[rr,cc]=1
img[rr1,cc1]=1

#檢測所有圖形的輪廓
contours=measure.find_contours(img,0.5)

#繪制輪廓
fig,(ax0,ax1)=plt.subplots(1,2,figsize=(8,8))
ax0.imshow(img,plt.cm.gray)
ax1.imshow(img,plt.cm.gray)
forn,contourinenumerate(contours):
ax1.plot(contour[:,1],contour[:,0],linewidth=2)
ax1.axis('image')
ax1.set_xticks([])
ax1.set_yticks([])
plt.show()

結果如下:不同的輪廓用不同的顏色顯示

E. Python邊緣提取如何擬合一條線

輸入圖像轉為灰度圖像 - 使用 Canny 進行邊緣提取,得到二值圖像 - 使用 findContours 尋找輪廓 - 使用 drawContours 繪制輪廓

F. 怎麼用Python將圖像邊界用最小二乘法擬合成曲線

本文實例講述了Python基於最小二乘法實現曲線擬合。分享給大家供大家參考,具體如下:

這里不手動實現最小二乘,調用scipy庫中實現好的相關優化函數。

考慮如下的含有4個參數的函數式:

希望本文所述對大家Python程序設計有所幫助。

G. 為什麼python是人工智慧最好的語言

選擇Python作為基於AI的項目有幾個原因,從使用較少的代碼到預構建的庫。這就是為什麼Python是AI和機器學習的好語言:
少代碼
選擇Python進行AI開發項目的一個主要優點是可以使用的代碼更少。為了更好地理解這一點,與其他編程語言(如Java,Ruby和Simula)(第一種面向對象的編程語言)相比,Python可以使用通常所需的總代碼量的五分之一來實現相同的邏輯。
雖然人工智慧涉及多種演算法,但Python提供的測試簡易性使其成為競爭對手中最有效的編程語言之一。 Python使得執行所需代碼變得更加容易,因此完成一項工作所需的時間更少。
靈活性
由於Python是一種動態類型語言,因此非常靈活。簡而言之,這意味著沒有「硬性規則」概述如何構建功能。
Python在解決問題方面也提供了更大的靈活性,這對於初學者和經驗豐富的Web開發人員來說都很有用。
聲望
除了最適合Web開發中的人工智慧之外,由於語法比其他編程語言(如Java)更短,因此該語言易於學習。因此,Python在全球范圍內越來越受歡迎,從小型企業到負責客戶網站的營銷機構。
它也很容易安裝,並且根據Python軟體基金會的說法,「現在很多Linux和UNIX發行版都包含最新的Python」,這使得它更容易上手。
預建庫
無論您是經驗豐富的Web開發人員還是被要求領導您的企業下一個AI開發項目,您都可以從Python的預構建庫中受益。一些可以幫助您實現AI的庫包括:
NumPy - 除了明顯的科學用途外,NumPy還可以用作通用數據的高效多維容器。
Tensorflow - TensorFlow是一個用於高性能數值計算的開源軟體庫。其靈活的架構允許在各種平台(CPU,GPU,TPU),桌面,伺服器集群,移動和邊緣設備上輕松部署計算。
ELI5 - ELI5是一個Python包,它有助於調試機器學習分類器並解釋它們的預測。
Pandas - Pandas是一個Python包,提供快速,靈活和富有表現力的數據結構,旨在使結構化(表格式,多維,可能異構)和時間序列數據的使用既簡單又直觀。
Theano - Theano是一個Python庫,允許您定義,優化和有效地評估涉及多維數組的數學表達式。
其他庫如Norvig可用於實現人工智慧演算法,有助於節省寶貴的時間。

H. python處理圖片數據

目錄

1.機器是如何存儲圖像的?

2.在Python中讀取圖像數據

3.從圖像數據中提取特徵的方法#1:灰度像素值特徵

4.從圖像數據中提取特徵的方法#2:通道的平均像素值

5.從圖像數據中提取特徵的方法#3:提取邊緣
是一張數字8的圖像,仔細觀察就會發現,圖像是由小方格組成的。這些小方格被稱為像素。

但是要注意,人們是以視覺的形式觀察圖像的,可以輕松區分邊緣和顏色,從而識別圖片中的內容。然而機器很難做到這一點,它們以數字的形式存儲圖像。請看下圖:

機器以數字矩陣的形式儲存圖像,矩陣大小取決於任意給定圖像的像素數。

假設圖像的尺寸為180 x 200或n x m,這些尺寸基本上是圖像中的像素數(高x寬)。

這些數字或像素值表示像素的強度或亮度,較小的數字(接近0)表示黑色,較大的數字(接近255)表示白色。通過分析下面的圖像,讀者就會弄懂到目前為止所學到的知識。

下圖的尺寸為22 x 16,讀者可以通過計算像素數來驗證:

圖片源於機器學習應用課程

剛才討論的例子是黑白圖像,如果是生活中更為普遍的彩色呢?你是否認為彩色圖像也以2D矩陣的形式存儲?

彩色圖像通常由多種顏色組成,幾乎所有顏色都可以從三原色(紅色,綠色和藍色)生成。

因此,如果是彩色圖像,則要用到三個矩陣(或通道)——紅、綠、藍。每個矩陣值介於0到255之間,表示該像素的顏色強度。觀察下圖來理解這個概念:

圖片源於機器學習應用課程

左邊有一幅彩色圖像(人類可以看到),而在右邊,紅綠藍三個顏色通道對應三個矩陣,疊加三個通道以形成彩色圖像。

請注意,由於原始矩陣非常大且可視化難度較高,因此這些不是給定圖像的原始像素值。此外,還可以用各種其他的格式來存儲圖像,RGB是最受歡迎的,所以筆者放到這里。讀者可以在此處閱讀更多關於其他流行格式的信息。

用Python讀取圖像數據

下面開始將理論知識付諸實踐。啟動Python並載入圖像以觀察矩陣:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from skimage.io import imread, imshow
image = imread('image_8_original.png', as_gray=True)
imshow(image)

#checking image shape
image.shape, image

(28,28)

矩陣有784個值,而且這只是整個矩陣的一小部分。用一個LIVE編碼窗口,不用離開本文就可以運行上述所有代碼並查看結果。

下面來深入探討本文背後的核心思想,並探索使用像素值作為特徵的各種方法。

方法#1:灰度像素值特徵

從圖像創建特徵最簡單的方法就是將原始的像素用作單獨的特徵。

考慮相同的示例,就是上面那張圖(數字『8』),圖像尺寸為28×28。

能猜出這張圖片的特徵數量嗎?答案是與像素數相同!也就是有784個。

那麼問題來了,如何安排這784個像素作為特徵呢?這樣,可以簡單地依次追加每個像素值從而生成特徵向量。如下圖所示:

下面來用Python繪制圖像,並為該圖像創建這些特徵:

image = imread('puppy.jpeg', as_gray=True)

image.shape, imshow(image)

(650,450)

該圖像尺寸為650×450,因此特徵數量應為297,000。可以使用NumPy中的reshape函數生成,在其中指定圖像尺寸:

#pixel features

features = np.reshape(image, (660*450))

features.shape, features

(297000,)
array([0.96470588, 0.96470588, 0.96470588, ..., 0.96862745, 0.96470588,
0.96470588])

這里就得到了特徵——長度為297,000的一維數組。很簡單吧?在實時編碼窗口中嘗試使用此方法提取特徵。

但結果只有一個通道或灰度圖像,對於彩色圖像是否也可以這樣呢?來看看吧!

方法#2:通道的平均像素值

在讀取上一節中的圖像時,設置了參數『as_gray = True』,因此在圖像中只有一個通道,可以輕松附加像素值。下面刪除參數並再次載入圖像:

image = imread('puppy.jpeg')
image.shape

(660, 450, 3)

這次,圖像尺寸為(660,450,3),其中3為通道數量。可以像之前一樣繼續創建特徵,此時特徵數量將是660*450*3 = 891,000。

或者,可以使用另一種方法:

生成一個新矩陣,這個矩陣具有來自三個通道的像素平均值,而不是分別使用三個通道中的像素值。

下圖可以讓讀者更清楚地了解這一思路:

這樣一來,特徵數量保持不變,並且還能考慮來自圖像全部三個通道的像素值。

image = imread('puppy.jpeg')
feature_matrix = np.zeros((660,450))
feature_matrix.shape

(660, 450)

現有一個尺寸為(660×450×3)的三維矩陣,其中660為高度,450為寬度,3是通道數。為獲取平均像素值,要使用for循環:

for i in range(0,iimage.shape[0]):
for j in range(0,image.shape[1]):
feature_matrix[i][j] = ((int(image[i,j,0]) + int(image[i,j,1]) + int(image[i,j,2]))/3)

新矩陣具有相同的高度和寬度,但只有一個通道。現在,可以按照與上一節相同的步驟進行操作。依次附加像素值以獲得一維數組:

features = np.reshape(feature_matrix, (660*450))
features.shape

(297000,)

方法#3:提取邊緣特徵

請思考,在下圖中,如何識別其中存在的對象:

識別出圖中的對象很容易——狗、汽車、還有貓,那麼在區分的時候要考慮哪些特徵呢?形狀是一個重要因素,其次是顏色,或者大小。如果機器也能像這樣識別形狀會怎麼樣?

類似的想法是提取邊緣作為特徵並將其作為模型的輸入。稍微考慮一下,要如何識別圖像中的邊緣呢?邊緣一般都是顏色急劇變化的地方,請看下圖:

筆者在這里突出了兩個邊緣。這兩處邊緣之所以可以被識別是因為在圖中,可以分別看到顏色從白色變為棕色,或者由棕色變為黑色。如你所知,圖像以數字的形式表示,因此就要尋找哪些像素值發生了劇烈變化。

假設圖像矩陣如下:

圖片源於機器學習應用課程

該像素兩側的像素值差異很大,於是可以得出結論,該像素處存在顯著的轉變,因此其為邊緣。現在問題又來了,是否一定要手動執行此步驟?

當然不!有各種可用於突出顯示圖像邊緣的內核,剛才討論的方法也可以使用Prewitt內核(在x方向上)來實現。以下是Prewitt內核:

獲取所選像素周圍的值,並將其與所選內核(Prewitt內核)相乘,然後可以添加結果值以獲得最終值。由於±1已經分別存在於兩列之中,因此添加這些值就相當於獲取差異。

還有其他各種內核,下面是四種最常用的內核:

圖片源於機器學習應用課程

現在回到筆記本,為同一圖像生成邊緣特徵:

#importing the required libraries
import numpy as np
from skimage.io import imread, imshow
from skimage.filters import prewitt_h,prewitt_v
import matplotlib.pyplot as plt
%matplotlib inline

#reading the image
image = imread('puppy.jpeg',as_gray=True)

#calculating horizontal edges using prewitt kernel
edges_prewitt_horizontal = prewitt_h(image)
#calculating vertical edges using prewitt kernel
edges_prewitt_vertical = prewitt_v(image)

imshow(edges_prewitt_vertical, cmap='gray')

閱讀全文

與python最小邊緣切圖相關的資料

熱點內容
gz壓縮文件夾 瀏覽:177
字母h從右往左跑的c語言編程 瀏覽:127
安卓手機如何擁有蘋果手機橫條 瀏覽:765
業余編程語言哪個好學 瀏覽:137
按照文件夾分個壓縮 瀏覽:104
航空工業出版社單片機原理及應用 瀏覽:758
如何在電信app上綁定親情號 瀏覽:376
安卓的怎麼用原相機拍月亮 瀏覽:805
配音秀為什麼顯示伺服器去配音了 瀏覽:755
c盤清理壓縮舊文件 瀏覽:325
app怎麼交付 瀏覽:343
圖蟲app怎麼才能轉到金幣 瀏覽:175
如何做徵文app 瀏覽:446
用什麼app管理斐訊 瀏覽:169
安卓如何下載寶可夢劍盾 瀏覽:166
編譯器開發屬於哪個方向 瀏覽:940
megawin單片機 瀏覽:687
以色列加密貨幣監督 瀏覽:909
程序員前端現在怎麼樣 瀏覽:499
伺服器和介面地址ping不通 瀏覽:557