1.Đọc ảnh-lưu ảnh import cv2 img= cv2.imread“ Sources/lena.png” imGray = cv2.cvt img, cv2.COLOR_BGR2GRAY cv2.imwrite“Resources/anhXam.png”, imGray # lưu ảnh xám vào file Resources ảnh tr
Trang 11.Đọc ảnh-lưu ảnh
import cv2
img= cv2.imread(“ Sources/lena.png”)
imGray = cv2.cvt( img, cv2.COLOR_BGR2GRAY)
cv2.imwrite(“Resources/anhXam.png”, imGray) # lưu ảnh xám vào file Resources
ảnh trong thực tế thường là RGB nhưng trong Opencv là BGR vì ông viết opencv thích thế
cv2.imshow(“Anh co gai”,img)
cv2.waitKey(0)
2.ĐỌC video
import cv2
cap= cv2.VideocCapture(“Sources/nhactre.mp4”)
while True:
success, img = cap.read()
cv2.imshow(“Video nhac tre”,img)
if cv2.waitKey(1) & 0xFF == ord(‘q’):
break
3 Basic function
- chuyển thành ảnh xám và chuyển ảnh xám sang ảnh mờ, ảnh màu sang ảnh biên
import cv2
img=cv2.imread("Resources/me3.jpg")
print(img.shape) // in ra kích thước ảnh img
imgray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) // ảnh xám
imBlur= cv2.GaussianBlur(imgray,(1,1),0) // lu mờ ảnh xám và chống nhiễu , (1,1) có thể thay bằng (13,13) miễn là số lẻ x số lẻ, số càng lớn thì càng mờ , 0 là singma để lm gì thì chưa check
imCanny = cv2.Canny(imgray,60,60) // lọc biên đen trắng
imResize= cv2.resize(imgray,(500,500)) // edit kích thước ảnh
imgCropped = img[0:200, 100:300] // lấy phần ảnh có tọa độ từ 0-200 và 100-300 print(imgCropped.shape) // in ra kích thước ảnh cắt
Trang 2cv2.imshow(“Anh cat”, imgCropped)
cv2.imshow(" Anh xam la:",imgray)
cv2.imshow("Anh la:",imBlur)
cv2.imshow("Anh bien :",imCanny)
cv2.waitKey(0)
4 Hình dạng và văn bản chú thích
import cv2
import numpy as np
im= np.zeros((512,512,3),np.uint8) # tạo files ảnh rỗng kích thước 512x512 để vẽ;
3 là ảnh màu
#print(im)
#im[:] =255,0,0
cv2.line(im,(0,450),(500,150),(200,220,110),3) #(0,450) là tọa độ điểm đầu ; #(500,150) tọa độ điểm cuối
# (200,220,110) màu của line , 3 là độ to của đường
cv2.rectangle(im,(0,40),(50,150),(200,20,110),2) # tạo hình vuông ; 2 là độ to của nét hình # nếu muốn bôi màu cả hình vuông thì chuyển 2 thành cv2.FILLED
cv2.circle(im,(213,260),30,(232,132,255),5) #tọa độ tâm,bán kính, màu ,độ to của đường biên
cv2.putText(im," *Hello* ",(2,233),cv2.FONT_HERSHEY_COMPLEX,1,(122,12,233),3)
cv2.imshow(" ",im)
cv2.waitKey(0)
4.Cắt ảnh
import cv2
import numpy as np
im= cv2.imread("Resources/quanbai.jpg")
width,height=190,250 # Khai báo kích thước ảnh cắt cần xuất ra
pts1= np.float32([[290,113],[410,140],[203,238],[332,271]]) # Đây là 4 tọa độ của ảnh cần cắt ra theo
thứ tự : góc trên trái, góc trên phải
góc dưới trái, góc dưới phải
(các thông số này mở Paint ra rồi di chuột vào các góc ảnh cần cắt )
pts2= np.float32([[0,0],[width,0],[0,height],[width,height]])
Trang 3
# Thông số ảnh cần xuất ra
matrix = cv2.getPerspectiveTransform(pts1,pts2)
imgoutput = cv2.warpPerspective(im,matrix,(width,height))
cv2.imshow( " Image", im)
cv2.imshow(" im cut",imgoutput)
cv2.waitKey(0)
Cách cắt ảnh này tổng quát hơn lệnh Imcroped= Img(0-200; 100-300) vì cái này chỉ cắt đc phần ảnh vuông góc với ảnh cũ
5.Joining Images
-Nhân đôi nhân ba ,tạo ma trận ảnh
7 Color ditection( dò màu)
import cv2
import numpy as np
def empty(c) :
pass
path = 'Resources/labo.png'
cv2.namedWindow("TrackBars")
cv2.resizeWindow("TrackBars",640,340)
cv2.createTrackbar("Hue min","TrackBars",0,179,empty)
cv2.createTrackbar("Hue max","TrackBars",176,179,empty)
cv2.createTrackbar("Sat min","TrackBars",40,255,empty)
Trang 4cv2.createTrackbar("Sat max","TrackBars",255,255,empty)
cv2.createTrackbar("Val min","TrackBars",64,255,empty)
cv2.createTrackbar("Val max","TrackBars",255,255,empty)
while True:
img=cv2.imread(path)
imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
hmin = cv2.getTrackbarPos("Hue min","TrackBars")
hmax = cv2.getTrackbarPos("Hue max", "TrackBars")
smin = cv2.getTrackbarPos("Sat min", "TrackBars")
smax = cv2.getTrackbarPos("Sat max", "TrackBars")
vmin = cv2.getTrackbarPos("Val min", "TrackBars")
vmax = cv2.getTrackbarPos("Val max", "TrackBars")
print(hmin,hmax,smin,smax,vmin,vmax)
lower = np.array([hmin, smin, vmin])
upper= np.array([hmax,smax,vmax])
mask= cv2.inRange(imgHSV,lower,upper)
resizeMask= cv2.resize(mask,(500,600))
imgResult= cv2.bitwise_and(img,img,mask =mask)
cv2.imshow("Original image",img)
cv2.imshow(" HSV :", imgHSV)
cv2.imshow(" MASK ",resizeMask)
cv2.imshow("image Result ",imgResult)
cv2.waitKey(1)
8 Đường biên và phát hiện hình dạng (Contours and shape ditection)
9 Đưa về ảnh nhị phân(threshold) ,lọc biên của ảnh( hàm Canny)
-2 hàm này k chạy trên ảnh màu nên phải chuyển convert ảnh màu sang ảnh gray
import cv2
import numpy as np
import imutils
path = "Resources/shape.jpg"
img = cv2.imread(path)
imRotate= imutils.rotate(img,60)
imgGray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
timCanh= cv2.Canny(imgGray,10,340) # lọc biên cho ảnh,10 vs 340 là 2 số nhỏ nhất và lớn nhất mà vẫn hiện đc đủ các biên
ret,thresh_binary= cv2.threshold(imgGray,127,255,cv2.THRESH_BINARY) #ảnh nhị phân cv2.imshow("Anh xam",imgGray)
cv2.imshow("Anh THRESHOW", thresh_binary)
cv2.imshow("Canh cua anh ",timCanh)
cv2.waitKey(0)
#cv2.destroyALLWindows()
Trang 5kết quả
Bài tập lớn
- Code nhận diện hình dạng
- import cv2
img = cv2.imread("Resources/shapes1.png")
imgGray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,thresh= cv2.threshold(imgGray,240,255,cv2.THRESH_BINARY)
contours,ret= cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE) for contour in contours:
approx= cv2.approxPolyDP(contour,0.01*cv2.arcLength(contour,True),True)
Trang 6cv2.drawContours(img,[approx],0,(0,0,0),2)
x= approx.ravel()[0]
y= approx.ravel()[1]
if len(approx)==3:
cv2.putText(img,"Tam Giac he",(x,y),cv2.FONT_HERSHEY_COMPLEX,0.5,(1,1,0)) elif len(approx)==4:
x1,y1,w,h = cv2.boundingRect(approx)
a = float(w/h)
if ( a > 0.95 )and ( a<= 1.3):
cv2.putText(img,"HINH VUONG ",(x,y),cv2.FONT_HERSHEY_COMPLEX,0.5, (1,1,0))
else :
cv2.putText(img, "HINH CHU NHAT ", (x, y), cv2.FONT_HERSHEY_COMPLEX, 0.5, (1, , ))
elif len(approx)==5:
cv2.putText(img, "Luc Giac hehe", (x, y), cv2.FONT_HERSHEY_COMPLEX, 0.5, (1,2,234))
elif len(approx) == 10:
cv2.putText(img, "Ngoi sao 5 canh", (x, y), cv2.FONT_HERSHEY_COMPLEX, 0.5, (180, 23, 24))
else:
cv2.putText(img, "Hinh tron ", (x, y), cv2.FONT_HERSHEY_COMPLEX, 0.5, (0 0
0))
cv2.imshow("shape",img)
cv2.imshow("Gray",imgGray)
cv2.waitKey(0)