Dalam tutorial ini, Anda akan belajar bagaimana Anda dapat memproses gambar dengan Python menggunakan perpustakaan OpenCV.
OpenCV adalah perpustakaan open source gratis yang digunakan dalam pemrosesan gambar waktu nyata. Ini digunakan untuk memproses gambar, video, dan bahkan streaming langsung, tetapi dalam tutorial ini, kami akan memproses gambar hanya sebagai langkah pertama. Sebelum memulai, mari kita instal OpenCV.
Sekarang OpenCV berhasil diinstal dan kami siap. Mari bersenang-senang dengan beberapa gambar!
Pertama-tama, impor modul cv2.
Sekarang untuk membaca gambar, gunakan metode imread() dari modul cv2, tentukan jalur ke gambar dalam argumen dan simpan gambar dalam variabel seperti di bawah ini:
img = cv2.imread('pyimg.jpg'>NumPy array ! That why image processing using OpenCV is so easy. All the time you are working with a NumPy array.
To display the image, you can use the imshow() method of cv2.
cv2.imshow('Original Image', img) cv2.waitKey(0)Fungsi waitkey membutuhkan waktu sebagai argumen dalam milidetik sebagai penundaan untuk menutup jendela. Di sini kita mengatur waktu ke nol untuk menampilkan jendela selamanya sampai kita menutupnya secara manual.
Untuk memutar gambar ini, Anda memerlukan lebar dan tinggi gambar karena Anda akan menggunakannya dalam proses rotasi seperti yang akan Anda lihat nanti.
height, width = img.shape[0:2]Atribut shape mengembalikan tinggi dan lebar matriks gambar. Jika Anda mencetak |_+_| , Anda akan memiliki output berikut:
Oke, sekarang kami memiliki matriks gambar kami dan kami ingin mendapatkan matriks rotasi. Untuk mendapatkan matriks rotasi, kami menggunakan getRotationMatrix2D () metode cv2. Sintaks dari getRotationMatrix2D () adalah:
img.shape[0:2]Ini dia Tengah adalah titik pusat rotasi, sudut adalah sudut dalam derajat dan skala adalah properti skala yang membuat gambar pas di layar.
Untuk mendapatkan matriks rotasi gambar kita, kodenya adalah:
cv2.getRotationMatrix2D(center, angle, scale)Langkah selanjutnya adalah memutar gambar kita dengan bantuan matriks rotasi.
Untuk memutar gambar, kami memiliki metode cv2 bernama bungkusAffine yang mengambil gambar asli, matriks rotasi gambar dan lebar dan tinggi gambar sebagai argumen.
rotationMatrix = cv2.getRotationMatrix2D((width/2, height/2), 90, .5)Gambar yang diputar disimpan dalam matriks Gambar yang diputar. Untuk menampilkan gambar, gunakan imshow() seperti di bawah ini:
rotatedImage = cv2.warpAffine(img, rotationMatrix, (width, height))Setelah menjalankan baris kode di atas, Anda akan memiliki output berikut:
Pangkas Gambar
Pertama, kita perlu mengimpor modul cv2 dan membaca gambar dan mengekstrak lebar dan tinggi gambar:
cv2.imshow('Rotated Image', rotatedImage) cv2.waitKey(0)Kami mengatakan kami ingin 550 kolom (lebar) dan 350 baris (tinggi).
Hasilnya akan menjadi:
Sesuaikan Kontras Gambar
Dalam modul Python OpenCV, tidak ada fungsi khusus untuk mengatur kontras gambar kecuali: dokumentasi resmi dari OpenCV menyarankan persamaan yang dapat melakukan kecerahan gambar dan kontras gambar keduanya secara bersamaan.
import cv2 img = cv2.imread('pyimg.jpg'>Resize an Image
To resize an image, you can use the resize() method of openCV. In the resize method, you can either specify the values of x and y axis or the number of rows and columns which tells the size of the image.
Import and read the image:
import cv2 img = cv2.imread('pyimg.jpg'>Now using the row and column values to resize the image:
newImg = cv2.resize(img, (550, 350)) cv2.imshow('Resized Image', newImg) cv2.waitKey(0)Di sini a adalah alpha yang mendefinisikan kontras gambar. Jika a lebih besar dari 1, akan ada kontras yang lebih tinggi.
Jika nilai a antara 0 dan 1 (lebih kecil dari 1 tetapi lebih besar dari 0), akan ada kontras yang lebih rendah. Jika a adalah 1, tidak akan ada efek kontras pada gambar.
b adalah singkatan dari beta. Nilai b bervariasi dari -127 hingga +127.
Untuk mengimplementasikan persamaan ini dalam Python OpenCV, Anda dapat menggunakan metode addWeighted(). Kami menggunakan metode addWeighted() karena menghasilkan output dalam kisaran 0 dan 255 untuk gambar berwarna 24-bit.
Sintaks metode addWeighted() adalah sebagai berikut:
new_img = a * original_img + bSintaks ini akan memadukan dua gambar, gambar sumber pertama (source_img1) dengan bobot alpha1 dan gambar sumber kedua (source_img2).
Jika Anda hanya ingin menerapkan kontras dalam satu gambar, Anda dapat menambahkan sumber gambar kedua sebagai nol menggunakan NumPy.
Mari kita bekerja pada contoh sederhana. Impor modul berikut:
cv2.addWeighted(source_img1, alpha1, source_img2, alpha2, beta)Baca gambar aslinya:
import cv2 import numpy as npDi sini minVal dan maxVal masing-masing adalah nilai gradien intensitas minimum dan maksimum.
Perhatikan kode berikut:
img = cv2.imread('pyimg.jpg'>Make an image blurry
Gaussian Blur
To make an image blurry, you can use the GaussianBlur() method of OpenCV.
The GaussianBlur() uses the Gaussian kernel. The height and width of the kernel should be a positive and an odd number.
Then you have to specify the X and Y direction that is sigmaX and sigmaY respectively. If only one is specified, both are considered the same.
Consider the following example:
import cv2 img = cv2.imread('pyimg.jpg'>Median Blur
In median blurring, the median of all the pixels of the image is calculated inside the kernel area. The central value is then replaced with the resultant median value. Median blurring is used when there are salt and pepper noise in the image.
To apply median blurring, you can use the medianBlur() method of OpenCV.
Consider the following example where we have a salt and pepper noise in the image:
import cv2 img = cv2.imread('pynoise.png'>Another comparison of the original image and after blurring:
Detect Edges
To detect the edges in an image, you can use the Canny() method of cv2 which implements the Canny edge detector. The Canny edge detector is also known as the optimal detector .
The syntax to Canny() is as follows:
cv2.Canny(image, minVal, maxVal)Dalam persamaan ini (xcenter , ycenter) adalah pusat lingkaran dan r adalah jari-jari lingkaran.
Gambar asli kami adalah:
Setelah mendeteksi lingkaran pada gambar, hasilnya akan menjadi:
Oke, jadi kita punya lingkaran di gambar dan kita bisa menerapkan topengnya. Perhatikan kode berikut:
import cv2 img = cv2.imread('pyimg.jpg'>tampilkan sebaris vs blok
Here is the result of the above code on another image:
Convert image to grayscale (Black & White)
The easy way to convert an image in grayscale is to load it like this:
Centroid (Center of blob) detection
To find the center of an image, the first step is to convert the original image into grayscale. We can use the cvtColor() method of cv2 as we did before.
This is demonstrated in the following code:
dimana saya bisa membeli tel cryptoimport cv2 img = cv2.imread('py.jpg'>
After detecting the center, our image will be as follows:
Apply a mask for a colored image
Image masking means to apply some other image as a mask on the original image or to change the pixel values in the image.
To apply a mask on the image, we will use the HoughCircles() method of the OpenCV module. The HoughCircles() method detects the circles in an image. After detecting the circles, we can simply apply a mask on these circles.
The HoughCircles() method takes the original image, the Hough Gradient (which detects the gradient information in the edges of the circle), and the information from the following circle equation:
(x - xcenter)2 + (y - ycenter)2 = r2Untuk membuat topeng, gunakan np.full yang akan mengembalikan array NumPy dari bentuk yang diberikan:
import cv2 import numpy as np img1 = cv2.imread('pyimg.jpg'>OpenCV: Hough Circle Transform : gray_img = cv2.medianBlur(cv2.cvtColor(img, cv2.COLOR_RGB2GRAY), 3) circles = cv2.HoughCircles(gray_img, cv2.HOUGH_GRADIENT, 1, 20, param1=50, param2=50, minRadius=0, maxRadius=0) circles = np.uint16(np.around(circles))Langkah selanjutnya adalah menggabungkan gambar dan array masking yang kita buat menggunakan bitwise_or operatornya sebagai berikut:
masking=np.full((img1.shape[0], img1.shape[1]),0,dtype=np.uint8) for j in circles[0, :]: cv2.circle(masking, (j[0], j[1]), j[2], (255, 255, 255), -1)Menampilkan gambar yang dihasilkan:
Mengekstrak teks dari Gambar (OCR)
Untuk mengekstrak teks dari gambar, Anda dapat menggunakan Google Tesseract-OCR. Anda dapat mengunduhnya dari ini tautan
Maka Anda harus menginstal modul pytesseract yang merupakan pembungkus Python untuk Tesseract-OCR.
Gambar dari mana kita akan mengekstrak teks dari adalah sebagai berikut:
Sekarang mari kita ubah teks dalam gambar ini menjadi string karakter dan tampilkan teks sebagai string pada output:
Impor modul pytesseract:
final_img = cv2.bitwise_or(img1, img1, masking=masking)Setel jalur file yang dapat dieksekusi Tesseract-OCR:
import pytesseractSekarang gunakan gambar_ke_string metode untuk mengubah gambar menjadi string:
pytesseract.pytesseract.tesseract_cmd = r'C:Program Files (x86)Tesseract-OCR esseract'Baca gambar dan ubah menjadi HSV menggunakan cvtColor():
print(pytesseract.image_to_string('pytext.png'>Works like charm!
Detect and correct text skew
In this section, we will correct the text skew.
The original image is as follows:
Import the modules cv2, NumPy and read the image:
import cv2 import numpy as np img = cv2.imread('pytext1.png'>Color Detection
Let’s detect the green color from an image:
Import the modules cv2 for images and NumPy for image arrays:
import cv2 import numpy as npGunakan metode inRange() dari cv2 untuk memeriksa apakah elemen larik gambar yang diberikan terletak di antara nilai larik batas atas dan bawah:
Now create a NumPy array for the lower green values and the upper green values:
lower_green = np.array([34, 177, 76]) upper_green = np.array([255, 255, 255])Ini akan mendeteksi warna hijau.
Terakhir, tampilkan gambar asli dan hasil:
masking = cv2.inRange(hsv_img, lower_green, upper_green)
Kurangi Kebisingan
Untuk mengurangi noise dari sebuah gambar, OpenCV menyediakan metode berikut:
- fastNlMeansDenoising(): Menghilangkan noise dari gambar skala abu-abu
- fastNlMeansDenoisingColored(): Menghilangkan noise dari gambar berwarna
- fastNlMeansDenoisingMulti(): Menghilangkan noise dari bingkai gambar skala abu-abu (video skala abu-abu)
- fastNlMeansDenoisingColoredMulti(): Sama seperti 3 tetapi bekerja dengan bingkai berwarna
Mari kita gunakan fastNlMeansDenoisingColored() dalam contoh kita:
Impor modul cv2 dan baca gambarnya:
cv2.imshow('Green Color detection', masking) cv2.waitKey(0)Baca gambar dan ubah menjadi gambar skala abu-abu:
2 3 import cv2 img = cv2.imread('pyn1.png'>Get image contour
Contours are the curves in an image that are joint together. The curves join the continuous points in an image. The purpose of contours is used to detect the objects.
The original image of which we are getting the contours of is given below:
Consider the following code where we used the findContours() method to find the contours in the image:
Import cv2 module:
import cv2Baca gambar dan ubah gambar menjadi gambar skala abu-abu:
img = cv2.imread('py1.jpg'>Remove Background from an image
To remove the background from an image, we will find the contours to detect edges of the main object and create a mask with np.zeros for the background and then combine the mask and the image using the bitwise_and operator.
Consider the example below:
Import the modules (NumPy and cv2):
import cv2 import numpy as npUrutkan kontur:
img = cv2.imread('py.jpg'>OpenCV threshold .Find the image contours:
img_contours = cv2.findContours(threshed, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)[-2]Hasilkan topeng menggunakan np.zeros:
img_contours = sorted(img_contours, key=cv2.contourArea) for i in img_contours: if cv2.contourArea(i) > 100: breakMenggambar kontur:
mask = np.zeros(img.shape[:2], np.uint8)Terapkan operator bitwise_and:
cv2.drawContours(mask, [i],-1, 255, -1)Menampilkan gambar asli:
new_img = cv2.bitwise_and(img, img, mask=mask)
Menampilkan gambar yang dihasilkan:
cv2.imshow('Original Image', img)
Pemrosesan gambar menyenangkan saat menggunakan OpenCV seperti yang Anda lihat. Saya harap Anda menemukan tutorialnya bermanfaat. Terus datang kembali.
Terima kasih.
#python #opencv #machine-learning #artificial-intelligence #developer