Chương trình xác định một pixel đen có thuộc điểm tô:

Một phần của tài liệu luận văn công nghệ thông tin thiết kế hệ thống nhập điểm tự động - svth trần viết khôi (Trang 50)

5. Xác định điểm tô đen :

5.5.2. Chương trình xác định một pixel đen có thuộc điểm tô:

Hàm có các tham số sau: xcd, ycd, width, height, pixels, xt, yt với ý nghĩa sau:

xcd, ycd : toạ độ của pixel đen trong mảng pixels.

Width, height : chiều rộng và chiều cao của mảng pixels . Pixels : mảng chứa các thông tin của khoảng ảnh.

xt, yt : tham biến dùng để chứa toạ độ tâm điểm khi tính được. Hàm trả về một giá trị cho biết là có tìm được tâm của điểm tô đen từ toạ độ của một pixel đen cho trước hay không.

int xacDinhDiemTo(int xcd,int ycd,int width,int height,unsigned char *pixels, int &xt,int &yt) {

int chamden=0; int tongchamden=0; int tongtrang=0;

int toado; int vitricd=0; int max=0; int bcd,lan,lan1;

int flag;// đã xuất hiện điểm đen int flagd;// dừng quét

// tìm số pixel đen phía trên toado=xcd+ycd*width;

for(int k=0;k<10 && (width-k-xcd)>0;k++){

if(pixels[toado+k]==1){

if(flag==0){ flag=1;

}

if(k-bcd>1 && flag==1){

skt+=k-bcd-1; } chamden++; bcd=k; } } int dodoi=(chamden+skt)/2; int sdd=0; bcd=0; for(k=1; k<7 ;k++){ toado=xcd+dodoi+(ycd-k)*width; if(toado<0) break; if(pixels[toado]==1) { sdd=sdd+k-bcd; //ycd=ycd-k+bcd; bcd=k; } } ycd-=sdd;

//đếm số chấm đen tại vị trí xcd,ycd trong khung 12 pixel for(int i=0;i<12 && (height-i-ycd)>0;i++){

toado=xcd+(ycd+i)*width; chamden=0; lan=0; lan1=0; bcd=0; flag=0;

flagd=0;

for(int j=0;j<12 && (width-j-xcd)>0;j++){

if(pixels[toado+j]==1){

////// xử lý những điểm không phải là chấm đen ///////// // loại bỏ các số 1,2,3,4,5,6,7

// 3 khoảng trắng liên tiếp xuất hiện 2 lần thì dừng if(j-bcd>3 && flag==1){

flagd=1; break;

}

// dưng khi có 5 khoảng trắng liên tiếp if(j-bcd>4 && flag==1){

return 0; } if(flag==0){ flag=1; } /// loại bỏ các số 0,8,9,10

// trong một dòng có 3 khoảng trắng đen liên tiếp thì dừng if(j-bcd>1 && flag==1){

lan++;

if(lan>3) return 0;

}

// trong một dòng có 2 khoảng trắng liên tiếp xuất hiện 2 lần thì dừng if(j-bcd>2 && flag==1){

lan1++;

if(lan1>2) return 0;

}

// đếm số chấm đen chamden++;

// lưu vị trí của chấm đen hiện tại trên một dòng bcd=j;

} }

if(i==0) xcd-=(12-chamden)/2; // kiểm tra dòng trống thì dừng

if(chamden==0 && i<=4) return 0; if(chamden==0 && i>5) break;

// kiểm tra các dòng ở giữa phải có số pixel lớn hơn 4 if(chamden<4 && i>2 && i<5) return 0;

if(max<chamden) max=chamden; tongchamden+=chamden;

if(flagd) break; }

// tính toạ độ tâm điểm tô xt=(12/2)+xcd;

yt=(i/2)+ycd; if(max<5) return 0;

if(tongchamden>35 && tongchamden<144) return 1; return 0;

}

Một phần của tài liệu luận văn công nghệ thông tin thiết kế hệ thống nhập điểm tự động - svth trần viết khôi (Trang 50)

Tải bản đầy đủ (PDF)

(73 trang)