Để có thể code những bài tập xử lý ảnh thì các bạn cần phải cài đặt : Python [ bản mới nhất ], thư viện xử lý ảnh OpenCV, numpy, matplotlib và IDE soạn thảo code : VS C >2016, Pycharm, Sublime Text, NotePad++,…
Bài 1 : Bài tập xử lý ảnh: đọc ảnh mầu I04.jpg vào biến ma trận I.
– Hiển thị kênh G của ảnh I.
– Chuyển ảnh mầu I sang ảnh đa cấp xám [grayscale] theo phương pháp tổ hợp 3 thành phần mầu, được ma trận ảnh Ig.
– Hiển thị ảnh Ig và hiển thị giá trị
đô cao, độ rộng của ảnh Ig.
import cv2
import numpy as np
#1a
I = cv2.imread["I04.jpg"]
cv2.imshow['kênh G',I[;;1]] #OpenCV: BGR:0->B,1->G,2->R
#1b
#đổi BGR sang gray
Ig = cv2.cvt[I,cv2.COLOR_BGR2GRAY]
cv2.imshow['anh gray',Ig]
#Tính độ cao ảnh
print['độ cao của ảnh',Ig.shape[0]]
#độ rộng ảnh
print[Ig.shape[1]]
cv2.waitKet[]
Bài 2: Sử dụng ngôn ngữ lập trình tùy chọn Python/Matlab/ C++/Java, thư viện thị giác máy tính OpenCV, viết chương trình thực hiện yêu cầu sau:
– Đọc ảnh mầu the_can_cuoc_congdan.jpg vào biến ma trận I.
– Hiển thị giá trị độ cao và độ rông của ảnh I và cả ảnh I.
– Hiệu chỉnh lại ảnh I với size mới là độ cao 256, độ rộng 256 được ảnh I2. Hiển thị ảnh I2.
– Chuyển đôi ảnh I sang ảnh HSV được ma trận ảnh Ihsv. Hiển thị kênh H của
ảnh Ihsv.
import cv2
import numpy as np
#2a
I = cv2.imread[' the_can_cuoc_congdan.jpg']
print['do cao anh',I.shape[0]]
print['do rong anh',I.shape[1]]
#2b
I2= cv2.resize[I,[256,256]]
cv2.imshow['Anh Resize',I2]
#2c
Ihsv = cv2.cvtColor[I,cv2.COLOR_BGR2HSV]
cv2.imshow['Anh HSV',Ihsv]
cv2.imshow['Kenh H',Ihsv[;;0]]
cv2.waitKet[]
Bài 3: Bài tập xử lý ảnh đọc ảnh mầu coins.jpg vào biến ma trận I.
– Hiển thị ảnh I.
– Chuyển ảnh sang biểu diễn HSV được ma trận Ihsv. Hiển thị kênh H của Ihsv.
– Xác định giá trị mức sáng nhỏ nhất của kênh S của ảnh Ihsv.
import cv2
import numpy as np
I = cv2.imread['coins.jpg']
#3a
cv2.imshow['Anh I',I]
#3b
Ihsv = cv2.cvtColor[I,cv2.COLOR_BGR2HSV]
cv2.imshow['kenh H',Ihsv[:,:,0]]
#cv2.imshow['kenh S',Ihsv[:,:,1]]
#cv2.imshow['kenh V',Ihsv[:,:,2]]
#mức sáng min
print[np.min[Ihsv[:,:,1]]]
#########################
cv2.waitKey[]
Cảm ơn các bạn đã ghé thăm. Chúc các bạn thành công!
Ý định ban đầu mình định viết một bài dài kể hươu kể nai về xử lý hình ảnh, nhưng rốt cuộc thấy có vẻ không hữu ích bằng ví dụ cụ thể bằng Python.
Đây là ảnh gốc dùng làm ví dụ trong toàn bộ bài viết này
Chuyển ảnh màu sang Grayscale
from PIL import Image img = Image.open["rick-morty.png"] # If you want a greyscale image, simply convert it to the L [Luminance] mode: new_img = img.convert['L'] new_img.save['rick-morty-l.png']
Chuyển ảnh màu sang Halftone
from PIL import Image img = Image.open["rick-morty.png"] # black and white image new_img = img.convert['1'] new_img.save['rick-morty-1.png']
Thay đổi độ tương phản [Contrast]
from PIL import Image, ImageEnhance # PIL accesses images in Cartesian co-ordinates, so it is Image[columns, rows] img = Image.open["rick-morty.png"] # Enhance constrast enhancer = ImageEnhance.Contrast[img] for i in range[1, 8]: factor = i / 4.0 new_img = enhancer.enhance[factor] new_img.save['rick-morty-%s.png' % i]
Thay đổi độ sáng [Brightness]
from PIL import Image, ImageEnhance # PIL accesses images in Cartesian co-ordinates, so it is Image[columns, rows] img = Image.open["rick-morty.png"] enhancer = ImageEnhance.Brightness[img] new_img = enhancer.enhance[1.8] # Darker # new_img = enhancer.enhance[0.8] new_img.save["rick-morty-brightness.png"]
Làm mờ [Gaussian blur]
from PIL import Image, ImageFilter # PIL accesses images in Cartesian co-ordinates, so it is Image[columns, rows] img = Image.open["rick-morty.png"] new_img = img.filter[ImageFilter.GaussianBlur[radius=20]] new_img.save["rick-morty-gaussian-blur.png"]
Làm tối 4 góc [Vignette]
import cv2 import numpy as np img = cv2.imread['rick-morty.png'] rows, cols = img.shape[:2] # generating vignette mask using Gaussian kernels kernel_x = cv2.getGaussianKernel[cols, 200] kernel_y = cv2.getGaussianKernel[rows, 200] kernel = kernel_y * kernel_x.T mask = 255 * kernel / np.linalg.norm[kernel] output = np.copy[img] # applying the mask to each channel in the input image for i in range[3]: output[:, :, i] = output[:, :, i] * mask cv2.imwrite['rick-morty-vig.png', output]
Tìm các cạnh bằng phương pháp Canny [Canny edge detection]
import cv2 img = cv2.imread['rick-morty.png', 0] edges = cv2.Canny[img, 100, 200] cv2.imwrite['rick-morty-edges.png', edges]
Vẽ countour của ảnh
import numpy as np import cv2 img = cv2.imread['rick-morty.png'] gray = cv2.cvtColor[img,cv2.COLOR_BGR2GRAY] ret, thresh = cv2.threshold[gray, 120, 255, cv2.THRESH_BINARY] contours = cv2.findContours[thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE][-2] for contour in contours: cv2.drawContours[img, contour, -1, [0, 255, 0], 3] cv2.imwrite['rick-morty-contour.png', img]
Nhận diện gương mặt
Link down haarcascade_frontalface_default.xml, cái này là training data set dùng để nhận diện gương mặt bằng Haar Cascade classifier.
import cv2 img = cv2.imread['queen.jpg'] gray = cv2.cvtColor[img, cv2.COLOR_BGR2GRAY] faceCascade = cv2.CascadeClassifier['haarcascade_frontalface_default.xml'] faces = faceCascade.detectMultiScale[ gray, scaleFactor=1.1, minNeighbors=5, minSize=[30, 30], flags=cv2.CASCADE_SCALE_IMAGE ] for [x, y, w, h] in faces: cv2.rectangle[img, [x, y], [x+w, y+h], [0, 255, 0], 2] cv2.imwrite['queen-fd.jpg', img]