請問關於 if 敘述的判斷...是否有啥限制呢? |
答題得分者是:richtop
|
xdio2
一般會員 發表:60 回覆:29 積分:17 註冊:2004-07-23 發送簡訊給我 |
小弟現在正在做很粗糙的車牌字元切割
想法很簡單,因為車牌為六個字元加上一個橫槓
若是沒有那個橫槓,那車牌字元的間距都會是一樣
就是因為加上了那個橫槓,且橫槓的大小跟字元大小不一樣
導致之後的車牌字元位置都會有變化
小弟先假設,在我擷取出來的畫面裡
大約長度六分之一的部分,都可以包含一個字元,
至於有沒有包含那個橫槓,我就先不管了
因為我怕把抓到的車牌字元畫面直接切六份
會導致字元被切的不完整
所以我在每個六分之一的點,往右邊再搜尋大約十個像素的位置
(因為加了橫槓,會導致車牌的位置大於六分之一的倍數,小弟的意思是:本來第三個字元也許是在(車牌六分之一*3)的長度位置找到起點,但因為加入了橫槓,使得真正起點的位置更右邊,所以我就只往右邊擴大搜尋範圍) 但是今天我在一個if敘述的地方發生奇怪的狀況
就是下方紅色程式碼的部分,若是改寫成紫色的部分則會發生錯誤 寫紅色部分的程式碼所造成的效果
但寫成紫色部分卻變成這樣
p.s.小弟處理的圖片是已經經過二值化的了
以下是小弟使用的圖片
請各位大大幫忙解惑一下
感謝~
//視窗左邊是Image1來載入我要處理的圖片 //視窗右邊的Image2則是載入處理後的樣子 Graphics::TBitmap *Bmp = new Graphics::TBitmap(); Bmp->Assign(Image1->Picture->Bitmap); Bmp->Canvas->Pen->Width=1; Bmp->Canvas->Pen->Color=clRed; //開始從車牌每個六分之一長度找東西 for(int i=0;i發表人 - xdio2 於 2004/11/07 03:40:46 發表人 - xdio2 於 2004/11/07 03:42:43 發表人 - xdio2 於 2004/11/07 03:44:12 |
Zard
尊榮會員 發表:24 回覆:396 積分:539 註冊:2003-11-26 發送簡訊給我 |
|
xdio2
一般會員 發表:60 回覆:29 積分:17 註冊:2004-07-23 發送簡訊給我 |
引言: 看起來像是運算子優先順序的問題, 改成這樣試試 if(( p[s1][0]/(float)(Bmp->Height) ) ==(min))多謝你的回覆喔 不過改成你說的那樣...效果還是一樣是錯誤的哩 即使改成下面這樣,效果也是錯誤的 if((float)( p[s1][0]/(float)(Bmp->Height) ) ==(float)(min)) 一定得把 p[s1][0]/(float)(Bmp->Height) 拉出來才行 為何會這樣呢.... 麻煩各位大大幫小弟解惑一下 感謝~ |
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
xdio2 您好: 根據之前的經驗,浮點數因儲存的有效位數有限,所以會出現捨去誤差,所以要讓浮點數完全相等,有時會有困難。
因此一個變通的方法是:利用兩浮點數差的絶對值是否小於一個設定的容許誤差,來判斷兩數的接近程度。 簡單修改,應該能讓您繼續接下來要完成的事。
//上面這個紅色部分若是整個替換成 float eps = 1e-3; // 可依需要自定 if( abs( p[s1][0]/(float)(Bmp->Height)-(min) ) < eps ) { Bmp->Canvas->MoveTo(i s1,0); Bmp->Canvas->LineTo(i s1,Bmp->Height); } //程式碼就會跑出錯誤的效果,效果請見上面小弟附的圖RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====##### |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |