- 1. Bitsel İşlemler ve Maskeleme
- 2. Evrişim ve Bulanıklaştırma
- 3. Keskinleştirme - Görüntü bulanıklıklarını tersine çevirme
- 4. Harmanlama (İkileştirme)
- 5. Genişleme, Erozyon, Açma / Kapatma
- 6. Kenar algılama ve Görüntü degradeleri
- 14. Perspektif ve Afin Dönüşümü
- 8. Canlı Eskiz Uygulaması
Önceki eğitimlerde, OpenCV hakkında bilgi edindik ve bazı temel görüntü işlemeyi yaptık ve ardından bir sonraki eğiticide, OpenCV'de kırpma, döndürme, görüntü dönüştürme vb. Gibi bazı görüntü manipülasyonları yaptık. Bu nedenle, önceki Görüntü İşleme eğitiminin devamında, burada öğreniyoruz. öğreticinin sonunda ve gibi biraz daha fazla görüntü işleme tekniği , web kamerası canlı beslemesinden canlı eskiz yapmak için bir python-opencv programı oluşturacağız. Bu uygulama, şimdiye kadar öğrendiğimiz veya bu öğreticide öğreneceğimiz birçok Görüntü işleme işlevini kullanacaktır, bu nedenle bu, tüm işlevleri kapsayacak iyi bir pratik örnek olacaktır.
Önceki öğreticide anlatıldığı gibi OpenCV, C ++, Python ve Java arayüzlerine sahip ve Windows, Linux, Mac OS, iOS ve Android'i destekleyen Açık Kaynak Banliyö Vizyon Kitaplığıdır. Böylece Python ve Linux ortamı ile Raspberry Pi'ye kolaylıkla kurulabilir. Ve OpenCV ve ekli kameralı Raspberry Pi, Yüz algılama, yüz kilidi, nesne izleme, araç plaka algılama, Ev güvenlik sistemi vb. Gibi birçok gerçek zamanlı görüntü işleme uygulaması oluşturmak için kullanılabilir.
Bu eğitimde, Python OpenCV kullanarak bazı daha fazla görüntü işleme göreceğiz. Burada Python OpenCV kullanarak bir görüntüye aşağıdaki işlevi uygulamayı öğreneceğiz:
- Bitsel İşlemler ve Maskeleme
- Evrişim ve Bulanıklaştırma
- Keskinleştirme - Görüntü bulanıklıklarını tersine çevirme
- Eşikleme (İkileştirme)
- Genleşme, Erozyon, Açma / Kapama
- Kenar algılama ve Görüntü gradyanları
- Perspektif ve Afin Dönüşümü
- Canlı Eskiz Uygulaması
1. Bitsel İşlemler ve Maskeleme
Bitsel işlemler, görüntü maskelemede size yardımcı olur ve bazı basit görüntüler oluşturmanıza yardımcı olur.
Kare yapmak
import cv2 import numpy np olarak # sadece iki boyut kullanıyoruz çünkü bu bir gri tonlamalı resim kullanıyor olsaydık, bir dikdörtgen = np.zeros ((300,300,3), np.uint8) kullanmıştık # Kare kare yapmak = np.zeros ((300,300), np.uint8) cv2.rectangle (square, (50,50), (250,250), 255, -1) cv2.imshow ("square", square) cv2. bekleme anahtarı (0)
Elips yapmak
elips = np.zeros ((300,300), np.uint8) cv2.ellipse (elips, (150,150), (150,150), 30,0,180,255, -1) cv2.imshow ("elips", elips) cv2.waitKey (0)
Bitsel işlemlerle deneme
#AND_sadece ikisinin kesiştiği yeri gösterir
BitwiseAND = cv2.bitwise_and (kare, elips) cv2.imshow ("VE", BitwiseAND) cv2.waitKey (0)
#OR_sadece kare veya elipsin nerede olduğunu gösterir
BitselVEYA = cv2.bitwise_or (kare, elips) cv2.imshow ("OR", BitwiseOR) cv2.waitKey (0)
#XOR_sadece herhangi birinin kendi başına var olduğu yerleri gösterir
BitwiseXOR = cv2.bitwise_xor (kare, elips) cv2.imshow ("XOR", BitwiseXOR) cv2.waitKey (0)
#NOT_ elipsin parçası olmayan her şeyi gösterir ve DEĞİL işlemi yalnızca tek şekle uygulanabilir
BitwiseNOT_elp = cv2.bitwise_not (elips) cv2.imshow ("NOT_ellipse", BitwiseNOT_elp) cv2.waitKey (0) cv2.destroyAllWindows ()
2. Evrişim ve Bulanıklaştırma
Bir büklüm tipik olarak, orijinal fonksiyonunun modifiye edilmiş bir versiyonudur üçüncü bir fonksiyon üreten iki fonksiyon üzerinde gerçekleştirilen bir matematiksel bir işlemdir.
Çıktı görüntüsü = görüntü İşlev Çekirdek boyutu
Gelen bilgisayar vizyonu biz çekirdek bizim resminin üzerine bizim manipulasyon işlevini çalıştırdığınız üzerinde boyutunu belirlemek için var kullanın.
Bulanıklaştırma, bir bölgedeki piksellerin ortalamasını aldığımız bir işlemdir (Kernel)
OpenCV, çekirdekler uygulayarak bir görüntüyü bulanıklaştırır; çekirdek, herhangi bir pikselin değerini, son görüntüyü oluşturmak için tek tek görüntüdeki her piksele uygulanan farklı komşu piksel miktarlarıyla birleştirerek, herhangi bir pikselin değerini nasıl değiştireceğinizi söyler.
Basitçe söylemek gerekirse, bir görüntü evrişimi, iki matrisin basit bir şekilde bir toplam ile çarpımıdır.
Aşağıdaki örnekle basitçe anlayabiliriz.
Yukarıdaki bir 3X3 Çekirdektir.
Normalleştirmek için 1/25 ile çarparız, yani toplamı 1'e çıkarırız, görüntülerin parlaklığı veya koyulaşması durumunda olduğu gibi yoğunluğu arttırır veya azaltırız.
Cv2.filter2D (image, -1, kernel) fonksiyonu tarafından verilen bir opencv bulanıklaştırma yöntemi filter2D'yi test edelim
cv2 içe aktar np image = cv2.imread ('elephant.jpg') cv2.imshow ('orijinal', resim) cv2.waitKey (0) olarak içe aktar
# 3x3 çekirdek matrisi oluşturma
kernel_3x3 = np.ones ((3,3), np.float32) / 9
# çekirdeği bir görüntüyle birleştirmek için cv2.filter2D kullanıyoruz
blur = cv2.filter2D (image, -1, kernel_3x3) cv2.imshow ('3x3_bluring', blur) cv2.waitKey (0)
# 7x7 çekirdek matrisi oluşturma
kernel_7x7 = np.ones ((7,7), np.float32) / 49
# çekirdeği bir görüntüyle birleştirmek için cv2.filter2D kullanıyoruz
blur = cv2.filter2D (image, -1, kernel_7x7) cv2.imshow ('7x7_bluring', blur) cv2.waitKey (0) cv2.destroyAllWindows ()
Orada yöntemleri bulanık diğer türleri de:
cv2.blur - Belirtilen bir pencerenin ortalamasını alır.
cv2.GaussianBlur - Benzer ancak bir Gauss penceresi kullanır (merkezin etrafındaki noktalara daha fazla vurgu yapılır).
cv2.medianBlur– Penceredeki tüm öğelerin medyanını kullanır.
cv2.bilateralFilter - Kenarları keskin tutarken bulanıklaştırır, kenarları ve çizgi ayrıntılarını korur.
Aşağıda tek tek göreceğiz, ilk önce aşağıdaki kodu kullanarak orijinal görseli göster:
cv2 içe aktar np image = cv2.imread ('elephant.jpg') cv2.imshow ('orijinal', resim) cv2.waitKey (0) olarak içe aktar
cv2.blur:
Bu yöntemde ortalama alma, görüntünün normalleştirilmiş bir kutu filtresi ile kıvrılmasıyla yapılır, bu kutunun altında yer alır ve merkezi elemanın yerini alır. Burada kutu boyutunun tuhaf ve pozitif olması gerekiyor .
# cv2.blur blur = cv2.blur (resim, (3,3)) cv2.imshow ('Ortalama', bulanıklaştırma) cv2.waitKey (0)
cv2.GaussianBlur:
# cv2.GaussianBlur # kutu filtresi yerine Gauss çekirdeğini deneyelim Gaussian = cv2.GaussianBlur (image, (7,7), 0) cv2.imshow ('Gaussian blur', Gaussian) cv2.waitKey (0)
cv2.medianBlur:
Çekirdek alanı altındaki tüm piksellerin medyanını alır ve merkezi öğe bu medyan değerle değiştirilir.
# cv2.medianBlur # , çekirdek alanının altındaki tüm piksellerin medyanını alır ve merkezi öğe #, bu medyan değerle değiştirilir. medyan = cv2.medianBlur (resim 5) cv2.imshow ('medyan bulanıklık', orta) cv2.waitKey (0)
cv2.bilateralFilter:
Bilateral, kenarları keskin tutarken gürültü gidermede çok etkilidir
# cv2.bilateralFilter kenarları keskin tutarken #Bilateral gürültü giderme çok etkilidir ikili = cv2.bilateralFilter (resim, 9,75,75) ('bulanıklık ikili' ikili) cv2.imshow cv2.waitKey (0) CV2. destroyAllWindows ()
Görüntü Paraziti Giderme - Yerel Olmayan anlamına gelir
cv2 içe aktar np image = cv2.imread ('elephant.jpg') cv2.imshow ('orijinal', resim) cv2.waitKey (0) olarak içe aktar
# Yoktan sonraki parametre 'h' filtre gücüdür (5-10 iyi bir aralıktır) #sonraki h, renk bileşenleri için h'dir, yine h ile aynı değere ayarlanır
dst = cv2.fastNlMeansDenoisingColored (image, None, 6,6,7,21) cv2.imshow ('Hızlı demek denois', dst) cv2.waitKey (0) cv2.destroyAllWindows ()
Yerel olmayan araçlardan arındırmanın 4 çeşidi vardır
cv2.fastNlMeansDenoising () - tek gri tonlamalı görüntü için
cv2.fastNlMeansDenoisingColored () - Tek renkli görüntü
cv2.fastNlmeansDenoisingMulti () - gri tonlamalı görüntü dizisi için
cv2.fastNlmeansDenoisingcoloredMulti () - renkli görüntü dizisi için
3. Keskinleştirme - Görüntü bulanıklıklarını tersine çevirme
Keskinleştirme, bulanıklaştırmanın tersidir, görüntüdeki kenarları güçlendirir veya vurgular.
Çekirdek =,,
Çekirdek matrisimiz bire kadar toplanır, bu nedenle normalleştirmeye gerek yoktur (yani, orijinal ile aynı parlaklığa kadar bir faktörle çarpılır), eğer çekirdek 1'e normalleştirilmezse, görüntü daha parlak veya daha koyu olur.
içe cv2 içe numpy np olarak görüntü = cv2.imread ('elephant.jpg') cv2.imshow ('orijinal', resim) cv2.waitKey (0)
kernel_sharpening = np.array (,
])
# giriş görüntüsüne çekirdeği keskinleştirme uygulama
keskinleştirilmiş = cv2.filter2D (görüntü, -1, kernel_sharpening) cv2.imshow ('keskinleştirilmiş görüntü', keskinleştirilmiş) cv2.waitKey (0) cv2.destroyAllWindows ()
4. Harmanlama (İkileştirme)
Eşikleme, bir görüntüyü ikili forma dönüştürme eylemidir. Açık durumda, eşikleme için ayrı bir işlev vardır.
Cv2. Eşik (görüntü, eşik değeri, Maksimum değer, eşik türü)
Aşağıdaki eşik türleri vardır:
- cv2.THRESH_BINARY - en yaygın
- cv2. THRESH_BINARY_INV - en yaygın
- cv2.THRESH_TRUNC
- cv2.THRESH_TOZERO
- cv2. THRESH_TOZERO_INV
NOT: görüntünün eşiklemeden önce gri tonlamaya dönüştürülmesi gerekir
içe cv2 içe numpy np olarak gri tonlama olarak #load görüntü görüntü = cv2.imread ('gradient.jpg', 0) cv2.imshow ('orijinal', resim) cv2.waitKey (0)
127'nin altındaki # değer 0'a (siyah) ve 127'nin üstü 255'e (beyaz) gider
_, eşik1 = cv2.threshold (görüntü, 127,255, cv2.THRESH_BINARY) cv2.imshow ('1 eşik', eşik1) cv2.waitKey (0)
# değer 127'nin altındaki 255'e gider ve 127'nin üzerindeki değerler 0'a gider (yukarıdakinin tersi)
_, eşik2 = cv2.threshold (image, 127,255, cv2.THRESH_BINARY_INV) cv2.imshow ('2 eşik', eşik2) cv2.waitKey (0)
127'nin üzerindeki # değer 127'de kesilir (tutulur), 255 bağımsız değişken kullanılmaz.
_, eşik3 = cv2.threshold (görüntü, 127,255, cv2.THRESH_TRUNC) cv2.imshow ('3 eşik kesim', eşik3) cv2.waitKey (0)
# 127'nin altındaki değerler 0'a gider, 127'nin üzerindeki değerler değişmez
_, eşik4 = cv2.threshold (image, 127,255, cv2.THRESH_TOZERO) cv2.imshow ('4 eşik', eşik4) cv2.waitKey (0)
# Yukarıdan yükselme, 127'nin altı değişmez, 127'nin üstü sıfıra gider
_, eşik5 = cv2.threshold (image, 127,255, cv2.THRESH_TOZERO_INV) cv2.imshow ('5 eşik', eşik5) cv2.waitKey (0) cv2.destroyAllWindows ()
5. Genişleme, Erozyon, Açma / Kapatma
Bunlar matematiksel morfoloji alanındaki işlemlerdir
Genişleme - bir görüntüdeki nesnenin sınırlarına pikseller ekler.
Erozyon - Bir görüntüdeki nesnenin sınırlarındaki pikselleri kaldırır.
Açılma - Erozyon ve ardından genişleme.
Kapanış - Genişleme ve ardından erozyon.
Açmak, görüntüyü önce erozyonla incelttiği (gürültüyü ortadan kaldırdığı) ve ardından genişlettiği için görüntülerin denoize edilmesinde çok yararlıdır.
Genişleme ve erozyonla karışıklık
Opencv, beyaz arka planı orijinal resim yerine genişleyen veya aşınan görüntü olarak kabul ettiğinden, genellikle beyaz arka planlı resimlerde genişleme ve erozyon arasında bazen kafa karışıklığı olabilir, bu nedenle bu durumda erozyon, görüntü örneğinde gösterildiği gibi genişleme olarak çalışır ve bunun tersi de geçerlidir. aşağıda gösterilen.
Unutmayın, Dilatasyon bir görüntüdeki nesnelerin sınırlarına piksel eklerken, Erozyon bir görüntüdeki nesnelerin sınırlarındaki pikselleri kaldırır.
cv2 içe aktar numpy np image = cv2.imread ('imagecv.png', 0) cv2.imshow ('orijinal', resim) cv2.waitKey (0)
#Erosion # çekirdek boyutumuzu
tanımlayalım
çekirdek = np.ones ((5,5), np.uint8)
# şimdi görüntüyü aşındırıyoruz, burada yineleme, görüntüyü aşındırmak istemediğiniz zamanlar değildir
erozyon = cv2.erode (image, kernel, iterations = 1) cv2.imshow ('Erozyon', erozyon) cv2.waitKey (0)
#dilation
genişleme = cv2.dilate (resim, çekirdek, yinelemeler = 1) cv2.imshow ('genişleme', genişleme) cv2.waitKey (0)
#opening, Gürültüyü gidermek için iyidir
açılış = cv2.morphologyEx (görüntü, cv2.MORPH_OPEN, çekirdek) cv2.imshow ('açma', açma) cv2.waitKey (0)
#closing, Gürültüyü gidermek için iyi
kapanış = cv2.morphologyEx (görüntü, cv2.MORPH_CLOSE, çekirdek) cv2.imshow ('kapanış', kapanış) cv2.waitKey (0) cv2.destroyAllWindows ()
6. Kenar algılama ve Görüntü degradeleri
Kenar algılama, özellikle konturlarla uğraşırken bilgisayarla görmede çok önemli bir alandır.
Kenarlar görüntünün sınırları olarak tanımlanabilir, aslında görüntüdeki nesneyi tanımlayan kenarlardır ve görüntü hakkında birçok bilgiyi korurlar.
Biçimsel Kenarlar, bir görüntüdeki ani değişiklikler (süreksizlikler) olarak tanımlanabilir ve pikseller kadar bilgiyi kodlayabilirler.
Yukarıdaki görüntü, bilgisayar görüşünün görüntüyü nasıl tanımladığını ve tanıdığını göstermektedir.
Kenar algılama algoritmaları: - Üç ana tür kenar algılama algoritması vardır
- Sobel - dikey veya yatay görüntülere vurgu yapmak için.
- Laplacian - düşük hata oranı, iyi tanımlanmış kenarlar ve doğru algılama sayesinde optimum.
- Canny Edge algılama algoritması (1986'da john.F.Canny tarafından geliştirildi)
1. Gauss bulanıklığı uygular
2. Görüntünün yoğunluk gradyanını bulur
3. Maksimum olmayan bastırma uygular (yani kenar olmayan pikselleri kaldırır).
4. Histerez, eşiği uygular (yani, piksel üst ve alt eşik içindeyse, bir kenar olarak kabul edilir)
cv2'yi içe aktar np image = cv2.imread ('input.jpg', 0) yükseklik, genişlik = resim.shape olarak içe aktar
#sobel
# sobel kenarlarını çıkarma
sobel_x = cv2.Sobel (image, cv2.CV_64F, 0,1, ksize = 5) sobel_y = cv2.Sobel (image, cv2.CV_64F, 1,0, ksize = 5) cv2.imshow ('orijinal', resim) cv2.waitKey (0) cv2.imshow ('sobelx', sobel_x) cv2.waitKey (0)
# Kesinlikle
cv2.imshow ('ağırbaşlı', sobel_y) cv2.waitKey (0)
sobel_OR = cv2.bitwise_or (sobel_x, sobel_y) cv2.imshow ('sobelOR', sobel_OR) cv2.waitKey (0)
#laplaian
laplacian = cv2.Laplacian (image, cv2.CV_64F) cv2.imshow ('Laplacian', laplacian) cv2.waitKey (0)
#canny kenar algılama algoritması eşik olarak gradyan değerlerini kullanır
# canny içinde iki değer sağlamamız gerekir: eşik1 ve eşik2.
# eşik 2'den daha büyük herhangi bir gradyan bir kenar olarak kabul edilir.
# eşik 1'den daha büyük herhangi bir gradyan bir kenar olarak değerlendirilmez.
# eşik 1 ve eşik 2 arasındaki değerler
, yoğunluklarının nasıl bağlandığına göre kenar veya kenar olmayan # değerlerdir, bu durumda 60'ın altındaki herhangi bir değer kenar olarak kabul
edilirken 120'nin üzerindeki herhangi bir değer kenar olarak kabul edilir.
canny = cv2.Canny (resim, 60,120) cv2.imshow ('canny', canny) cv2.waitKey (0) cv2.destroyAllWindows ()
14. Perspektif ve Afin Dönüşümü
Bir adım geri gidelim ve afin ve afin olmayan dönüşümlere bir göz atalım, aşağıda gösterilen orijinal resim açıkça afin olmayan bir görüntüdür çünkü kenarlar bir noktada buluşacaktır, ancak çarpıtarak ve perspektifi alarak düzeltebiliriz dönüşümü.
Bu perspektif dönüşümü için, orijinal görüntünün dört koordinatına ve ardından çıktı görüntüsünün dört noktasına ihtiyacımız var, bunlar point_A ve points_B ile gösterilir. Öncelikle bu noktaların yardımıyla getPerspectiveTransform fonksiyonu yardımıyla bir dönüşüm matrisi M hesaplıyoruz.
Ve sonra bu matris, son çıktıyı oluşturmak için warpPerspective fonksiyonuna verilir.
Şimdi önce Perspektif dönüşümünü deneyelim.
cv2 içe aktar numpy np olarak içe aktar matplotlib.pyplot olarak plt image = cv2.imread ('paper.jpg') cv2.imshow ('orijinal', resim) cv2.waitKey (0)
# orijinal görüntünün 4 köşesinin koordinatı
points_A = np.float32 (,,,])
# istenen çıktının 4 köşesinin
koordinatları # A4 kağıt oranını kullanıyoruz 1: 1.41
points_B = np.float32 (,,,])
# olası dönüşüm matrisini hesaplamak için iki noktanın iki kümesini kullanın , M
M = cv2.getPerspectiveTransform (points_A, points_B) warped = cv2.warpPerspective (image, M, (420,594)) cv2.imshow ('warpprespective', çarpık) cv2.waitKey (0) cv2.destroyAllWindows ()
Afin dönüşümü, afin olmayan dönüşümden daha kolaydır çünkü dönüşümü elde etmek için sadece üç noktaya ihtiyacımız var. Tüm süreç aynıdır, ancak perspektif dönüşümü yerine artık afin dönüşüme sahibiz ve ayrıca warpAffine'deki sütun ve satırları manuel olarak girmek yerine şekil işlevinden tanımlıyoruz .
cv2 içe aktar numpy'yi np olarak içe aktar matplotlib.pyplot olarak plt image = cv2.imread ('box.jpg') satırlar, cols = image.shape cv2.imshow ('orijinal', resim) cv2.waitKey (0)
# orijinal görüntünün 3 köşesinin koordinatı
points_A = np.float32 (,,])
# İstenilen çıktının 3 köşesinin
koordinatları # A4 kağıt oranını kullanıyoruz 1: 1.41
points_B = np.float32 (,,])
# Affine #transformation matrisini, M hesaplamak için iki noktanın iki kümesini kullanın
M = cv2.getAffineTransform (points_A, points_B) warped = cv2.warpAffine (image, M, (cols, rows)) cv2.imshow ('warpaffine', warped) cv2.waitKey (0) cv2.destroyAllWindows ()
8. Canlı Eskiz Uygulaması
Öncelikle, yukarıdaki tüm görüntü işleme işlevlerini okuduktan sonra bu mini projeyi oluşturduğunuz için kendinizi tebrik edin. Python OpenCV'nin bu mini projesinde bazı yeni döngü ve fonksiyon kavramlarını öğreneceğiz. Programlamaya aşina iseniz, fonksiyon ve döngülerin ne olduğu hakkında daha geniş bir fikriniz olmalıdır. Bununla birlikte, python'da döngülerin ve işlevlerin temel kavramı aynı kalır, ancak onları tanımlama yöntemi biraz değişir.
Dolayısıyla, bu programın başlangıcında " def sketch (image) " başlığı altında belli bir grup ifadeyi görebiliriz : bu, belirli bir çıktı için birlikte çalışan bir grup ifadenin bir fonksiyonun resmi bir tanımıdır.
Dolayısıyla bu çizim bir fonksiyondur, python fonksiyonunda "def" ile tanımlanır ve ":" işareti ile biter. Ayrıca fonksiyonun içinde olması gereken veya fonksiyonun düzgün çalışması için gerekli olan ifadeler de fonksiyon tarafından otomatik olarak yan yana hizalanır. Dolayısıyla fonksiyonlardan çıkabilmek için ifadelerin tamamen sola hizalı olması gerekiyordu. Diğer referanslar için, işlevlerin python'da nasıl tanımlandığı konusunda google'a başvurabilirsiniz.
Yani bu kroki işlevinde biz çıkış vermek için bir araya birleştirmek görüntü işleme birkaç kat girmiştik. İlk olarak, görüntü gri tonlamaya dönüştürülür, böylece açıklık onu kolayca işleyebilir ve ardından gürültüyü azaltmak için gri tonlamalı görüntüye Gauss bulanıklığı uygulanır. Daha sonra, canny'nin kenar algılama algoritması yardımıyla kenarlar çıkarılır, ardından kenar tanımlı görüntüye bir ikili tersi uygulanır, burada ikili tersi de bitsel_NOT ile yapılabilir, ancak bu eşiği kasıtlı olarak ikili tersini seçtik, çünkü özgürlük verir net bir görüntü elde edene kadar parametrelerini ayarlamak için.
Ayrıca, işlevin argüman görüntüsünü aldığını ve ret ve mask adlı iki argümanı döndürdüğünü unutmayın. Ret, işlevin başarılı bir şekilde çalışıp çalışmadığını söyleyen bir Boolean iken ve maske, işlevin son çıktısı, yani işlenen görüntüdür.
Daha sonra ikinci konsept, cv2.VideoCapture (0) işlevi tarafından yapılan, görüntüyü cap.read () işlevi ile okunabilen bir nesne kapağında saklayan, bu kapağa da dikkat etmek için burada web kamerasının çalıştırılması . read (), sürekli olarak görüntüleri yakalamak ve ona canlı bir video hissi vermek için sonsuz süre döngüsünün içindedir, burada videonun kare hızı, web kameranızın kare hızıdır ve çoğunlukla 24 ila 60 arasındadır. fps.
cap.read () , ret ve çerçeve döndürür; burada ret, işlevin başarıyla çalıştığını veya çalışmadığını belirten Boole'dur ve çerçeve web kamerası tarafından çekilen görüntüyü içerir.
Aşağıda, Canlı Çizim'i çalıştırmak için eksiksiz Python OpenCV kodu verilmiştir
import cv2 np olarak içe aktar numpy #sketch oluşturma işlevi def sketch (image): # görüntüyü gri tonlamaya dönüştür img_gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY) #Gaussian blur img_gray_blur = cv2.GaussianBlur (img_gray_blur (img_gray_blur) kullanarak görüntüyü temizleme 5,5), 0) # kenarları ayıkla canny_edges = cv2.Canny (img_gray_blur, 10,70) # görüntüyü ters çevirme ret, maske = cv2.threshold (canny_edges, 70,255, cv2.THRESH_BINARY_INV) dönüş maskesi #initialize webcam, cap , video yakalama tarafından sağlanan nesnedir # başarılı olup olmadığını gösteren bir Boole içerir (ret) #it ayrıca web kamerasından (çerçeve) toplanan görüntüleri de içerir cap = cv2.VideoCapture (0) True: ret, frame = cap.read () cv2.imshow ('livesketcher', sketch (frame)) if cv2.waitKey (1) == 13: # 13 enterkey break # kamerayı serbest bırak ve pencereyi kapat, cap.release () cap.release () cv2.destroyAllWindows () yardımıyla web kamerasını serbest bırakmayı unutma
Bu, Python-OpenCV'deki Görüntü manipülasyonlarının 2.Bölümünün sonudur. Bilgisayar görüşü ve OpenCV hakkında iyi bir fikir edinmek için önceki makalelere göz atın (Python OpenCV ile Başlarken ve Python OpenCV'de Görüntü Manipülasyonları (Bölüm 1) ve Computer Vision ile harika bir şeyler yapabileceksiniz.