有關影像處理的問題 |
答題得分者是:taishyang
|
Ece.Winson
一般會員 發表:13 回覆:19 積分:6 註冊:2003-05-27 發送簡訊給我 |
出處:http://www.chinastu.com/study/html/soft/soft-htm/soft-program/program-luntan/program-2-luntan-010710-04.htm
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=21806
各位大大:
以下是小弟我參考jackkcg大哥所po的文章而
寫出來的一個影像處理的程式,但是在compiler
出現了幾個warning,小弟一直找不到問題所在
能不能請各位大哥提供意見,幫助我解除疑惑
//---------------------------------------------------------------------------
#include
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
Ece.Winson您好:
將
if (rgb[i][j].g_color=GetGValue(color)<100) Image1->Canvas->Pixels[i][j]=RGB(0,0,0); else Image1->Canvas->Pixels[i][j]=RGB(255,255,255);改成 if (rgb[i][j].g_color==GetGValue(color)<100) Image1->Canvas->Pixels[i][j]=TColor(RGB(0,0,0)); else Image1->Canvas->Pixels[i][j]=TColor(RGB(255,255,255));順心 <>~我也是在學習的階段,所以請您多多見諒與指教~> |
Ece.Winson
一般會員 發表:13 回覆:19 積分:6 註冊:2003-05-27 發送簡訊給我 |
taishyang大哥您好:
小弟按照您說的下去改後,還是有出現二個warning如下
不知道是還有哪裡出了問題,是否能夠請您再提供一些意見
[C Warning] Unit3.cpp(74): W8060 Possibly incorrect assignment.
[C Warning] Unit3.cpp(94): W8004 'color' is assigned a value that is never used.
謝謝 Ece.Winson上 發表人 - Ece.Winson 於 2003/06/05 15:59:36
|
JerryKuo
版主 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
引言: 出處:http://www.chinastu.com/study/html/soft/soft-htm/soft-program/program-luntan/program-2-luntan-010710-04.htm http://delphi.ktop.com.tw/topic.php?TOPIC_ID=21806 各位大大: 以下是小弟我參考jackkcg大哥所po的文章而 寫出來的一個影像處理的程式,但是在compiler 出現了幾個warning,小弟一直找不到問題所在 能不能請各位大哥提供意見,幫助我解除疑惑 //--------------------------------------------------------------------------- #include |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
Ece.Winson您好:
'color' is assigned a value that is never used.
表示您宣告了,但沒使用到
Possibly incorrect assignment.
表示在if 判斷式中的等號要用==而不是用=
不然可能會有incorrect assignment 您不嫌棄的話可以參考我寫的影像處理範例
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=28358 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~>
|
Ece.Winson
一般會員 發表:13 回覆:19 積分:6 註冊:2003-05-27 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
Ece.Winson
一般會員 發表:13 回覆:19 積分:6 註冊:2003-05-27 發送簡訊給我 |
taishyang大哥您好:
我用的是BCB4.0的版本WIN ME
而且我將程式改成如下:
if (Image1->Picture->Bitmap->PixelFormat==pf24bit)
graylevel=(rgb[i][j].r_color+rgb[i][j].g_color+rgb[i][j].b_color)/3;
Image1->Canvas->Pixels[i][j]=TColor(RGB)(graylevel,graylevel,graylevel));
結果B.C的情形還是存在
下圖是圖片經gray處理後之情形
但是如果出現了A的情形,再load一次之後gray處理後之情形如下圖
便是正常的情況
令我非常困惑不知道大哥是否有過類似的經驗謝謝
Ece.Winson 上
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
Ece.Winson
一般會員 發表:13 回覆:19 積分:6 註冊:2003-05-27 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
Ece.Winson
一般會員 發表:13 回覆:19 積分:6 註冊:2003-05-27 發送簡訊給我 |
taishyang大哥您好:
我參考了你sample中有關scrollbar的寫法後
但是二值化後之圖形依然不會隨threshold值的變動
而改變以下是我所寫的程式不知道是不是那裡寫錯了
void __fastcall TForm1::ScrollBar1Change(TObject *Sender)
{
threshold=ScrollBar1->Position;
Edit1->Text=ScrollBar1->Position; width=Image1->Picture->Width;
height=Image1->Picture->Height;
for(i=1;i<=width;i++) {
for(j=1;j<=height;j++)
{
TColor color=Image1->Canvas->Pixels[i][j];
rgb[i][j].r_color=GetRValue(color);
rgb[i][j].g_color=GetGValue(color);
rgb[i][j].b_color=GetBValue(color);
gray=(rgb[i][j].r_color+rgb[i][j].g_color+rgb[i][j].b_color)/3;
if (gray
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
Ece.Winson
一般會員 發表:13 回覆:19 積分:6 註冊:2003-05-27 發送簡訊給我 |
taishyang大哥您好:
不好意思我po程式時少了一部份
更正後的程式如下:
gray=(rgb[i][j].r_color rgb[i][j].g_color rgb[i][j].b_color)/3; if (gray<threshold) Image1->Canvas->Pixels[i][j]=TColor(RGB(0,0,0));
else
Image1->Canvas->Pixels[i][j]=TColor(RGB(255,255,255));
您說的我都有做了但是還是無法隨scrollbar來變動 發表人 - Ece.Winson 於 2003/06/07 18:01:46 發表人 - Ece.Winson 於 2003/06/07 18:06:06 發表人 - Ece.Winson 於 2003/06/07 18:27:39
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
Ece.Winson您好:
如圖所示:
按下紅色圈起來的按鈕再把您的程式碼放在裡面即可完整呈現您的程式
大於或小於的符號用[全形]的形式
不過我想您把程式改成
gray=(rgb[i][j].r_color+rgb[i][j].g_color+rgb[i][j].b_color)/3; if (gray >= ScrollBar1->Position) Image1->Canvas->Pixels[i][j]=TColor(RGB(0,0,0)); else Image1->Canvas->Pixels[i][j]=TColor(RGB(255,255,255));並設定Max為255,Min為0應該就可以了 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~> 發表人 - |
Ece.Winson
一般會員 發表:13 回覆:19 積分:6 註冊:2003-05-27 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
Ece.Winson您好:
我修改您的程式您試看看,在我的電腦上是可行的WinXP BCB5.0
struct rgb_str { unsigned char r_color; unsigned char g_color; unsigned char b_color; }; rgb_str rgb[2000][2000]; void __fastcall TForm1::ScrollBar1Change(TObject *Sender) { int threshold=ScrollBar1->Position; Edit1->Text=ScrollBar1->Position; int width=Image1->Picture->Width; int height=Image1->Picture->Height; for(int i=1;i<=width;i++) { for(int j=1;j<=height;j++) { TColor color=Image1->Canvas->Pixels[i][j]; rgb[i][j].r_color=GetRValue(color); rgb[i][j].g_color=GetGValue(color); rgb[i][j].b_color=GetBValue(color); int gray=(rgb[i][j].r_color+rgb[i][j].g_color+rgb[i][j].b_color)/3; if (gray >threshold) Image1->Canvas->Pixels[i][j]=TColor(RGB(0,0,0)); else Image1->Canvas->Pixels[i][j]=TColor(RGB(255,255,255)); } } Image1->Invalidate(); }順心 ~我也是在學習的階段,所以請您多多見諒與指教~ |
Ece.Winson
一般會員 發表:13 回覆:19 積分:6 註冊:2003-05-27 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
Ece.Winson您好:
您把處理過後的圖秀在另外一個Image上吧
因為在您第一次處理後Image1的內容已經被更改了,所以沒有辦法對原來的圖取不同的臨界值,而是對處理過後的圖再做二值化
if (gray >threshold) Image2->Canvas->Pixels[i][j]=TColor(RGB(0,0,0)); else Image2->Canvas->Pixels[i][j]=TColor(RGB(255,255,255));順心 <>~我也是在學習的階段,所以請您多多見諒與指教~> 發表人 - |
Ece.Winson
一般會員 發表:13 回覆:19 積分:6 註冊:2003-05-27 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |