Source code xử lý ảnh python

Để 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]

Chủ Đề