1. Trang chủ
  2. » Thể loại khác

Notebook image processing Xử lý ảnh

6 26 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 6
Dung lượng 597 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

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 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 2

cv2.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 4

cv2.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 5

kế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 6

cv2.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)

Ngày đăng: 14/12/2021, 00:03

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w