1. Trang chủ
  2. » Luận Văn - Báo Cáo

Bài tập 1 nhập môn thị giác máy tính

16 1 0
Tài liệu được quét OCR, nội dung có thể không chính xác
Tài liệu đã được kiểm tra trùng lặp

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Bài Tập 1
Người hướng dẫn TS. Lê Bức Hạnh
Trường học Đại học Quốc gia TP. Hồ Chí Minh
Chuyên ngành Nhập Môn Thị Giác Máy Tính
Thể loại Bài tập
Năm xuất bản 2022 - 2023
Thành phố Tp. Hồ Chí Minh
Định dạng
Số trang 16
Dung lượng 1,31 MB

Nội dung

Lập trình sử dụng hàm OpenCV can bang histogram ma tran hinh trén va dislay histogram trước và sau khi cân bằng a... Nhận xét: Kết quả tính toán bằng tay và kết quả dung OpenCV là hoản t

Trang 1

DAI HOC QUOC GIA TP HO CHi MINH TRUONG DAI HOC BACH KHOA

BAI TAP 1 MON HOC: NHAP MON THI GIAC MAY TINH

HOC KY 222/ NAM HOC 2022 - 2023

LỚP: L01 - NHÓM: 3 GIANG VIEN HUONG DAN: TS LE BUC HANH

Tp Hồ Chí Minh — 2023

Trang 2

MUC LUC

Trang 3

Bai 1

Giả sử vùng làm việc có kích thước như sau:

Ta có:

Vay ta chon 4 camera daA4200-30mecl (S-Mount) - Tray (40pcs) - Basler dart có:

4.6 mm x 3.4 mm Sensor Size

Trang 4

Bai 2

Cho hình có ma trận sau:

a Can bang histogram bang tay ma tran trên trong khoảng từ 0 — 255 sử dụng 256 bin

b Lập trình sử dụng hàm OpenCV can bang histogram ma tran hinh trén va dislay histogram trước và sau khi cân bằng

a Theo ma tran, ta co các cường độ và pixel tương ứng

Bài làm

20 |30 |80 |I0 |110|12 | 15 | 16 | 220 | 230 | 240 | 250

0

Trang 5

HISTOGRAM

1

Gray Level

Trang 6

207.1875 223.125 239.0625

255

b Su dung Visual Studio va OpenCV

@ Code

#include “opencv2/opencv.hpp"

#include “opencv2/highgui/highgui.hpp"

#include “opencv2/imgproc/imgproc.hpp"

#include <opencv2/core/utils/logger.hpp>

#include <iostream>

#include <stdint.h>

using namespace cv;

using namespace std;

void histogram(string const& name, Mat const& Image)

{

int bin = 255;

int histsize[] = { bin };

float range[] = { 0,255 };

const float* ranges[] = { range };

Mat hist;

int chanel[] = { @ };

int hist_heigt = 256;

Trang 7

Mat hist_image = Mat::zeros(hist_heigt, bin, CV_8SC3);

calcHist(&lImage, 1, chanel, Mat(), hist, 1, histsize, ranges, true, false);

double max_val = Q;

minMaxLoc (hist, 9, &max_val);

for (int i = @; i < bin; i++)

float binV = hist.at<float>(i);

int height = cvRound(binv * hist_heigt / max_val);

line(hist_image, Point(i, hist_heigt - height), Point(i, hist_heigt), Scalar::a11(255));

}

imshow(name, hist_image);

}

int main(int argc, char const* argv[])

{

cv: :utils: : logging: :setLogLevel(utils: : logging: :LOG_LEVEL_SILENT);

float data[16] = { 30, 20, 30, 30, 80, 30, 100, 110, 120, 160, 30,

150, 220, 230, 240, 250 };

Mat gray_anh = Mat(4, 4, CV_32F, data);

Mat gray_his;

namedWindow("Gray_old", WINDOW_FREERATIO);

gray_anh.convertTo(gray_anh, CV_8UC1);

equalizeHist(gray_anh, gray_his);

cout << “Matrix = " << endl <<

cout << “Matrix_histogram = "

<< endl;

imshow("Gray_old", gray_anh);

imshow("Gray_new_histogram", gray_his);

histogram("Histogram Old", gray_anh);

histogram("Histogram New", gray_his);

waitKkey(@);

return 0;

<< gray_anh << endl << endl;

<< endl << "" << gray_his << endl

@® Két quả thụ được

Trang 8

Nhận xét: Kết quả tính toán bằng tay và kết quả dung OpenCV là hoản toàn giống nhau

Bài 3

a+b

Code:

#include <iostream>

#include <opencv2/opencv.hpp>

using namespace std;

using namespace cv;

// Ham mouseEvent de tim mau H, S, V cua canh tay de phan nguong

Trang 9

void mouseEvent(int evt, int x, int y, int flags, void * param)

{

Mat * bgr = (Mat *) param;

Mat hsv;

cvtColor(*bgr, hsv, COLOR _BGR2HSV);

if (evt == EVENT _LBUTTONDOWN)

{

printf("(%d,%d): %d %d %d\n", x, y, (int)(hsv).at<Vec3b>(y,x)[9],

(int) (hsv).at<Vec3b>(y,x)[1], (int) (hsv) at<Vec3b>(y, x)[2]);

}

int main(int argc, char** argv)

{

// Load 2 anh vao va resize cho cung kich thuoc

Mat background_image = imread("D:/HK222/TGMT/BAITAP1/background png",

IMREAD_COLOR);

Mat hand_image = imread("D:/HK222/TGMT/BAITAP1/hand png", IMREAD COLOR); resize(background image, background_image, Size(600, 40@));

resize(hand_image, hand_image, Size(600, 400));

// a) Tinh khoang cach Euclide giua 2 mau

Mat diff_image;

absdiff(hand_image, background_image, diff_image);

Float d;

float t = 0.9;

for(int i = 0; i < diff_image.rows; i++)

{

for(int j = 9; j < diff image.cols; j++)

Trang 10

Vec3b p = diff_image.at<Vec3b>(i,j);

d = sqrt(p[9]*p[9] + p[1]?#p[1] + p[2]#p[2])›

// if (d > t)

/f final_image.at<unsigned char>(i,j) = 255; // else

// final_image.at<unsigned char>(1,j) = 9;

// Show 2 anh input

namedWindow("Back Ground Image", WINDOW _AUTOSIZE); imshow("Back Ground Image", background_image) ;

namedWindow( "Hand Image", WINDOW _AUTOSIZE);

imshow("Hand Image", hand_image);

setMouseCallback("Hand Image", mouseEvent, &hand_image);

// Tao cac thanh slider de tim nguong

namedWindow("Control", WINDOW AUTOSIZE);

createTrackbar("“Low H", "Control", nullptr, 179); createTrackbar("High H", “Control”, nullptr, 179); createTrackbar("“Low S", "Control", nullptr, 255); createTrackbar("High S", “Control”, nullptr, 255); createTrackbar("“Low V", "Control", nullptr, 255); createTrackbar("High V", “Control”, nullptr, 255);

int lowH, highH, lowS, highS, lowV, highv;

// Phan nguong HSV

while(1)

{

Trang 11

highV),

Mat final_image = imread("D:/HK222/TGMT/BAITAP1/hand.png", IMREAD COLOR); resize(final_image, final_image, Size(600, 400));

cvtColor(final_image, final image, COLOR _BGR2HSV);

lowH = getTrackbarPos("Low H", “Control");

highH = getTrackbarPos("High H", “Control");

lowS = getTrackbarPos("Low S", "“Control");

highS = getTrackbarPos("High S", “Control");

lowV = getTrackbarPos("Low V", “Control");

highV = getTrackbarPos("High V", “Control");

// Threshold the image

inRange(final_image, Scalar(lowH, lowS, lowV), Scalar(highH, highs, final image); // (9, 141, 76) - (255, 255, 255)

namedWindow("Final Image", WINDOW _AUTOSIZE);

imshow("Final Image", final_image) ;

if (waitKey(1) == ‘q')

{

break;

}

}

return 0;

Két qua:

Trang 12

Bài 4

Cho hình có ma trận sau:

STT+1 16 17 18 19 STT-1 21

Trang 13

- Nhóm | nén STT=3 ta co ma tran:

Chon:

* Chia dữ liệu thành 2 phần theo

- Nhỏ hơn

- Lớn hơn

* Chia dữ liệu thành 2 phần theo

Trang 14

- Nhỏ hơn

- Lớn hơn

* Chia dữ liệu thành 2 phần theo

- Nhỏ hơn

- Lớn hơn

* Ta có

Vậy giá trị Otsu Threshold =

Ma trận sau khi phân ngưỡng:

255 255 0 255 255 255 255

Trang 15

255 255 255 255 255 255 255

b Su dung Visual Studio va OpenCV

Code:

b) Su dung ham :

Source Code:

#include <opencv2/opencv.hpp>

#include <stdio.h>

using namespace cv;

using namespace std;

int main()

{

int STT;

cout << “Read the Group_ID: ";

cin >> STT;

Mat source = (Mat_<uint8 t>(6,7)<<1,2,S51T,4,5,6,7,

8 ,9, 10, 11, STT, 13,14, (STT+1),16 ,17 ,18 ,19 ,(STT-1), 21,

22, 23, STT, 25, 26, 27, 28,

29, 30, 31, 32, 33, 34, 35,

36, 37, 38, 39, 40, (STT+1),42);

Mat dst;

double minValue = 9;

double maxValue = 255;

long double otsu_thre = threshold(source,dst,minValue,maxValue, THRESH_OTSU) ; cout << “Otsu Thresh : ” << otsu_thre<<endl;

cout <<”OUTPUT” <<dst<<endl;

return 0;

}

Kết quả :

Trang 16

5 $ /BT4 Read the G 5} H

su Thresh

Sa

6,

*Nhdan xét Gia tri Threshold ding phương pháp Ostu ca tinh tay va function của thư viện openCV cho ra cung ket qua

Ngày đăng: 20/10/2024, 18:00

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w