PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Xử lý ảnh (http://www.picvietnam.com/forum/forumdisplay.php?f=51)
-   -   cầu cứu nhận diện biển số xe (http://www.picvietnam.com/forum/showthread.php?t=32399)

nupakachi 07-06-2013 05:49 PM

cầu cứu nhận diện biển số xe
 
các pro giải thích giùm em với.càng kỹ càng tốt.Em đang rất rất cần.cảm ơn rất nhiều
Image<Bgr, Byte> img = new Image<Bgr, Byte>(image); // Ảnh đầu vào đưa về dạng Image;

Image<Gray, Byte> image_gray = img.Convert<Gray, Byte>();// Hàm chuyển ảnh xám;

image_gray = image_gray.SmoothGaussian(5);
image_gray = image_gray.SmoothMedian(5);
Image<Gray, Byte> blur = image_gray.SmoothBlur(5, 5);// Tiến hành giảm nhiễu;

CvInvoke.cvSobel(blur, blur, 1, 0, 3);//Phát hiện biên dọc;

CvInvoke.cvThreshold(blur, blur, 0, 255, Emgu.CV.CvEnum.THRESH.CV_THRESH_OTSU);//Phân ngưỡng Otsu

CvInvoke.cvErode(blur, blur, IntPtr.Zero, 1);
CvInvoke.cvDilate(blur, blur, IntPtr.Zero, 2);// Erode và dilate ảnh sau phân ngưỡng

StructuringElementEx element = new StructuringElementEx(17, 3, 8, 2, Emgu.CV.CvEnum.CV_ELEMENT_SHAPE.CV_SHAPE_RECT);
CvInvoke.cvMorphologyEx(blur, blur, IntPtr.Zero, element, Emgu.CV.CvEnum.CV_MORPH_OP.CV_MOP_CLOSE, 1);// Thuật toán Closing.

vohungvi 29-08-2014 11:53 AM

Giải thích cái thuật toán của OpenCV trong code bạn đưa hả? Thấy có cmt giải thích trong đó rồi mà, giải thích gì nữa bạn?

vohungvi 29-08-2014 12:14 PM

Cho bạn cái hàm để bạn tham khảo

int FindPlate()
{
Mat src1 = imread("images\\BienSo.jpg", CV_LOAD_IMAGE_COLOR);
if(!src1.data)
return 0;
Mat src2 = src1.clone(); // copy anh
Mat gray, binary;
cvtColor(src1, gray, CV_BGR2GRAY);
threshold(gray, binary, 100, 255, CV_THRESH_BINARY);
imshow("Anh nhi phan goc", binary);
Mat morpho;
Mat element = getStructuringElement(MORPH_CROSS, Size(3,3), Point(1,1));
erode(binary, morpho, element, Point(-1,-1), 3);
imshow("Anh sau khi thuc hien phep gian no", morpho);

vector<vector<Point> > contours1;
findContours(binary, contours1, CV_RETR_LIST, CV_CHAIN_APPROX_NONE );
for(size_t i = 0; i < contours1.size(); i++)
{
Rect r = boundingRect(contours1[i]);
if(r.width/(double)r.height > 3.5f && r.width/(double)r.height < 4.5f)
rectangle(src1, r, Scalar(0, 0, 255), 2, 8, 0);
else
rectangle(src1, r, Scalar(0, 255, 0), 1, 8, 0);
}
imshow("Ket qua phat hien truoc phep gian no", src1);


vector<vector<Point> > contours2;
findContours(morpho, contours2, CV_RETR_LIST, CV_CHAIN_APPROX_NONE );
for(size_t i = 0; i < contours2.size(); i++)
{
Rect r = boundingRect(contours2[i]);
if(r.width/(double)r.height > 3.5f && r.width/(double)r.height < 4.5f)
rectangle(src2, r, Scalar(0, 0, 255), 2, 8, 0);
else
rectangle(src2, r, Scalar(0, 255, 0), 1, 8, 0);
}
imshow("Ket qua phat hien sau khi phep gian no", src2);
}

vnmember 07-06-2019 03:48 PM

bạn có thể hướng dẫn cụ thể hơn một chút được không mình là người mới, cảm ơn bạn


Múi giờ GMT. Hiện tại là 01:16 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam