1. Trang chủ
  2. » Công Nghệ Thông Tin

Các lệnh OpenCV cơ bản trong python

9 125 1

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Các lệnh OpenCV cơ bản trong python
Trường học University of Science and Technology
Chuyên ngành Computer Vision / Image Processing
Thể loại Bài giảng
Định dạng
Số trang 9
Dung lượng 22,27 KB

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

Nội dung

Project OpenCV được bắt đầu từ Intel năm 1999 bởi Gary Bradsky. OpenCV viết tắt cho Open Source Computer Vision Library. OpenCV là thư viện nguồn mở hàng đầu cho Computer Vision và Machine Learning, và hiện có thêm tính năng tăng tốc GPU cho các hoạt động theo realtime. OpenCV được phát hành theo giấy phép BSD (), do đó nó miễn phí cho cả học tập và sử dụng với mục đích thương mại. Nó có trên các giao diện C++, C, Python và Java và hỗ trợ Windows, Linux, Mac OS, iOS và Android. OpenCV được thiết kế để hỗ trợ hiệu quả về tính toán và chuyên dùng cho các ứng dụng realtime (thời gian thực). Nếu được viết trên CC++ tối ưu, thư viện này có thể tận dụng được bộ xử lý đa lõi (multicore processing).

Trang 1

import cv2 //khai báo thư viện cv2

import numpy as np // khai báo thư viện numpy nhưng thay numpy bằng np (gon)

//thư viện numpy để tạo ảnh -Nhập ,xuất ảnh – Chuyển đổi không gian màu

BGR/GRAY/HSV -img = cv2.imread("meo.jpg") //nhập ảnh

img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) //chuyển đổi không gian màu BGR -> GRAY

img = img[200:400,200:400] //hiển thị vùng tương ứng

cv2.imshow("Image",img) //xuất ảnh

-Tạo ảnh-Vẽ các đối tượng lên

ảnh -img = np.empty((600,800,3)) //W:600 L:800 3 kênh màu BGR

//empty sẽ lấy đến địa chỉ bất kì thường là màu đen img = np.empty((600,800,3)) //giá trị 3 kênh màu tương ứng là 0 > màu đen

img[:,:,(0,1)]=255 //định một khỏang với giá trị màu tương ứng

img[:,:,2)]=255

for i in range(0,400,10): //lệnh for để vẽ nhiều line

cv2.line(img,(300,400),(10,10),(0,0,0),3) //vẽ đường line với (x1,y1);(x2,y2);(B,G,R);(thickness)

cv2.putText(img,str(i),(10,10),cv2.FONT_HERSHEY_COMPLEX_SMALL,1,(0,255,0)) //viết chữ với [bienanh],str(bien so)/"mau",vitri,font,size,màu,

cv2.circle(img,(200,200),50,(255,0,0),3) //vẽ hình tròn với [bienanh],tam,bankinh,mau,thickness

cv2.ellipse(img,(300,300),(100,50),45,0,180,(0,0,0),3) //vẽ hình ellipse với [bienanh],tam,chieu dai truc,do nghieng,goc dau,goc cuoi,mau,thickness

pts = np.array(((10,10),(10,100),(100,100),(100,10)),np.int32) //tạo mảng các đỉnh với mỗi điểm lưu ở vùng có bộ nhớ 32bit

pts = [pts.reshape((-1,1,2))] //chuyển từ mảng hai chiều sang 3 chiều với -1 tự hiểu là số điểm trong mảng

cv2.polylines(img,pts,True,(255,255,255),3) //vẽ đa giác với [bienanh],tập hợp dinh,kin/k kin,mau,thickness

-Tạo thanh trượt-Trackbar - Thay đổi màu

sắc -import cv2

import numpy as np

blue = 0 //khai báo ba biến tương ứng ba kênh màu B-G-R

green = 0

red = 0

def blue_function(pos): //khai báo hàm

global blue //khai báo biến blue là biến toàn cục

blue=pos //truyền giá trị của pos vào blue

def green_function(pos):

global green

green=pos

Trang 2

def red_function(pos):

global red

red=pos

cv2.createTrackbar("Blue: ","Image",0,255,blue_function) //tạo thanh trượt-Trackbar với [tenthanhtruot],[tencuaso],giá trị bắt đầu, giá trị lớn nhất, gọi hàm tương ứng

cv2.createTrackbar("Green: ","Image",0,255,green_function)

cv2.createTrackbar("Red: ","Image",0,255,red_function)

img = np.empty((600,800,3),np.uint8) //mỗi điểm ảnh có kiểu dữ liệu unsign int8

img[:,:,1] = green

img[:,:,2] = red

cv2.imshow("Image",img)

if cv2.waitKey(10) == ord('q'): //trong khi cho 10ms nếu phím q được nhấn

break

-Phân ngưỡng ảnh-Threshold – Các loại phân

ngưỡng -import cv2

get_value.value=pos

cv2.namedWindow("Control") //tạo cửa sổ mới

cv2.createTrackbar("Value","Control",0,255,get_value) //tạo thanh trượt

while True:

img = cv2.imread("meomeo.png")

cv2.imshow("Control",img)

ret, img = cv2.threshold(img,get_value.value,255,cv2.THRESH_TRUNC) //phân ngưỡng với [bienanh], giá trị cài đặt lại từ thanh trượt,max,mode phân ngưỡng

cv2.imshow("Image",img)

if cv2.waitKey(10) == ord('q'):

break

cv2.destroyAllWindows()

-Phát VIDEO dùng tốc độ quay - Play VIDEO -import cv2

Trang 3

cap = cv2.VideoCapture("KUKA.mpg") //lưu video vào biến cap

fps = cap.get(cv2.CAP_PROP_FPS) //đọc giá trị số khung hình trên giây

print(fps)

while True:

pre_time = time.time() //đọc thời gian hiện tại

img = cv2.medianBlur(img,19) //làm mờ video

cv2.imshow("Video",img) //xuất video

xl_time = (time.time() - pre_time)*1000 //tính thời gian xử lí các dòng lệnh

print(xl_time)

if xl_time > wait_time:

delay_time = 1

else:

delay_time = wait_time - xl_time

if cv2.waitKey(int (delay_time)) == ord('q'): //delay thời gian tương ứng với tốc độ khung hình

break

cv2.destroyAllWindows()

-Bám theo vật thể - Tracking object -BGR

import cv2

import time

import numpy as np

Min_Blue.value = pos

Min_Blue.value = 0

def Min_Green(pos):

Min_Green.value = pos

Min_Green.value = 0

def Min_Red(pos):

Min_Red.value = pos

Min_Red.value = 0

def Max_Blue(pos):

Max_Blue.value = pos

Max_Blue.value = 255

def Max_Green(pos):

Max_Green.value = pos

Max_Green.value = 255

def Max_Red(pos):

Max_Red.value = pos

Max_Red.value = 255

Trang 4

cv2.createTrackbar("Min blue","Control",0,255,Min_Blue) //tạo 6 thanh trượt

cv2.createTrackbar("Min green","Control",0,255,Min_Green)

cv2.createTrackbar("Min red","Control",0,255,Min_Green)

cv2.createTrackbar("Max blue","Control",255,255,Max_Blue,)

cv2.createTrackbar("Max green","Control",255,255,Max_Green)

cv2.createTrackbar("Max red","Control",255,255,Max_Red)

wait_time = 1000/fps

print(fps)

play = True

while True:

pre_time = time.time()

ret,img = cap.read()

break

cv2.imshow("Control",img)

lower = np.array([Min_Blue.value,Min_Green.value,Min_Red.value]) //tạo mảng giới hạn dưới của ba kênh màu BGR

upper = np.array([Max_Blue.value,Max_Green.value,Max_Red.value]) // tạo mảng giới hạn trên của ba kênh màu BGR

mask_sub = cv2.inRange(img,lower,upper) //tạo mặt nạ phụ: nằm trong giới hạn thì trắng, ngoài thì đen

mask = cv2.merge((mask_sub,mask_sub,mask_sub)) //tạo mặt nạ chính: phối ba kênh màu lại

cv2.imshow("Mask",mask)

cv2.imshow("Res", res)

xl_time = (time.time() - pre_time)*1000

if xl_time > wait_time:

delay_time = 1

else:

delay_time = wait_time - xl_time

if key == ord('q'):

break

play = not play

cv2.destroyAllWindows()

Trang 5

-Khử nhiễu - Ăn mòn, giãn mask_sub = cv2.inRange(img,lower,upper)

mask_sub = cv2.erode(mask_sub,kernel) //khử nhiễu: quét ảnh ma trận nào có kích thước bé hơn 4x4 thì xóa

kernel = np.ones((7,7))

mask_sub = cv2.dilate(mask_sub,kernel) // phòng to: quét ảnh ma trận nào có kích thước bé hơn 7x7 thi phóng to ra

-Định vị vật thể - Vẽ đường bao -HSV

import cv2

import time

import numpy as np

def Min_H(pos):

Min_H.value = pos

Min_H.value = 33

def Min_S(pos):

Min_S.value = pos

Min_S.value = 50

def Min_V(pos):

Min_V.value = pos

Min_V.value = 62

def Max_H(pos):

Max_H.value = pos

Max_H.value = 102

def Max_S(pos):

Max_S.value = pos

Max_S.value = 255

def Max_V(pos):

Max_V.value = pos

Max_V.value = 248

cv2.namedWindow("Control")

cv2.createTrackbar("Min H", "Control", 33, 255, Min_H)

cv2.createTrackbar("Min S", "Control", 50, 255, Min_S)

cv2.createTrackbar("Min V", "Control", 62, 255, Min_V)

cv2.createTrackbar("Max H", "Control", 102, 255, Max_H)

Trang 6

cv2.createTrackbar("Max S", "Control", 255, 255, Max_S)

cv2.createTrackbar("Max V", "Control", 248, 255, Max_V)

cap = cv2.VideoCapture("tracking.mp4") #nhập video

fps = cap.get(cv2.CAP_PROP_FPS) #đọc fps của video

wait_time = 1000 / fps

print(fps)

play = True

delta_time = 0

while True:

pre_time = time.time()

if play:

ret, img = cap.read()

if img is None: #nếu hết video thì dừng ở khung hình cuối

img = temp_img

else:

temp_img = img

img_clone = img.copy() #copy một bản khác

cv2.imshow("Control", cv2.putText(img_clone.copy(),"%.2f (ms)" %delta_time,(10,30),cv2.FONT_HERSHEY_SIMPLEX,1,(0,0,255),3)) #in ra xuli_time

lower = np.array([Min_H.value, Min_S.value, Min_V.value])

upper = np.array([Max_H.value, Max_S.value, Max_V.value])

mask = cv2.inRange(img_hsv, lower, upper)

kernel = np.ones((5, 5))

contours,hierarchy = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) #xác định đường biên

tmp_c = contours [0]

y = int (M['m01'] / (M['m00'] +1))

cv2.putText(res,"Tr.Banh",(x,y),cv2.FONT_HERSHEY_COMPLEX,1,(0,0,255),2) #xuất chữ

else:

cv2.imshow("Result", res)

Trang 7

delta_time = (time.time() - pre_time) * 1000

if delta_time > wait_time:

delay_time = 1

else:

delay_time = wait_time - delta_time

key = cv2.waitKey(int(delay_time))

if key == ord('q'):

break

if key == ord(' '):

play = not play

cv2.destroyAllWindows()

-Qũy đạo vật thể - Vẽ đường bao tương

res = cv2.circle(img_clone,(int (cx),int (cy)),int(cr/1.5),(255,0,0),2) #vẽ đường tròn tương ứng với R phù hợp

arr_point = np.append(arr_point,(int(cx),int(cy))) #thêm tọa độ x,y hiện tại vào mảng

arr_point = np.delete(arr_point,(0,1))

cv2.polylines(res,[arr_point],False,(0,255,0),2) #vẽ quỹ đạo bằng cách nối các điểm trong mảng

-Chọn vật thể - Xử lí

chuột -import cv2

import time

def Mouse_event(event, x, y, f, img):

Mouse_event.y0 = y

Mouse_event.y1 = y

Trang 8

Mouse_event.draw = False #kết thúc vẽ

miny = min(Mouse_event.y0,Mouse_event.y1)

maxy = max(Mouse_event.y0, Mouse_event.y1)

minx = min(Mouse_event.x0, Mouse_event.x1)

maxx = max(Mouse_event.x0, Mouse_event.x1)

Mouse_event.img = img[miny:maxy,minx:maxx] #cắt hình tương ứng với vùng chọn

Mouse_event.y = y

Mouse_event.x0 =0

Mouse_event.y0 =0

Mouse_event.x1 =0

Mouse_event.y1 =0

Mouse_event.x =0

Mouse_event.y =0

Mouse_event.draw = False

while True:

pre_time = time.time()

ret,img = cap.read()

img_lone = img.copy()

if Mouse_event.draw:

img_lone = cv2.rectangle(img_lone,(Mouse_event.x0,Mouse_event.y0),(Mouse_event.x,Mouse_event.y),(0,0,255),2) #vẽ hình vuông

cv2.imshow("Sample", Mouse_event.img)

cv2.imshow("Video", img_lone)

cv2.setMouseCallback("Video",Mouse_event,img) #đọc sự kiện từ chuột với hàm Mouse_event

if cv2.waitKey(int (1)) == ord('q'):

break

cv2.destroyAllWindows()

-Bám theo vật thể chỉ định tùy

if Mouse_event.img is not None:

tpt = cv2.matchTemplate(img_clone,Mouse_event.img,cv2.TM_CCOEFF_NORMED) #so sánh vùng chọn với ảnh, càng giống càng sáng

min_val, max_val,min_loc,max_loc = cv2.minMaxLoc(tpt) #trả về các giá trị: giống ít nhất, giống nhiều nhất, tọa độ giống ít nhất, tọa độ giống nhiều nhất

Trang 9

cv2.putText(img_clone, "%.2f" % max_val, max_loc, cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 255, 0), 2) #in giá trị giống nhiều nhất

cv2.rectangle(img_clone, max_loc, (max_loc[0] + w, max_loc[1] + h), (255, 0, 0), 2) #vẽ vùng chọn chạy theo tọa độ giống nhất cv2.imshow("Sample", Mouse_event.img)

cv2.imshow("Compare",tpt)

cv2.imshow("Video", img_clone)

cv2.setMouseCallback("Video",Mouse_event,img)

Ngày đăng: 21/12/2022, 14:07

TỪ KHÓA LIÊN QUAN

w