各位大大---請教前景減背景,為什麼行不通,搞不定 |
尚未結案
|
suzuki001
一般會員 發表:15 回覆:8 積分:4 註冊:2005-06-05 發送簡訊給我 |
BMP2->PixelFormat=pf24bit;
capSetCallbackOnFrame (hCapWnd, &FrameCallBack);
Byte *ptr1, *ptr2,*ptr3 = NULL;
ForeGroundBitmap=Image3->Picture->Bitmap;//前景
BackGroundBitmap=Image1->Picture->Bitmap;//背景
BMP2=Image2->Picture->Bitmap;
for (int y=0;y<240;y )
{
ptr3=(Byte*)ForeGroundBitmap->ScanLine[y];
ptr1=(Byte*)BackGroundBitmap->ScanLine[y];
ptr2=(Byte*)BMP2->ScanLine[y];
for (int x=0;x<320;x )
{
int d=abs((int)ptr3[x*3]-(int)ptr1[x*3]);
if(d>Threshold)
{
ptr2[3*x]=0;
ptr2[3*x 1]=0;
ptr2[3*x 2]=0;
}
else
{
ptr2[3*x 2]=ptr1[3*x];
ptr2[3*x 1]=ptr1[3*x];
ptr2[3*x]=ptr1[3*x];
}
}
}
Image2->Picture->Assign(BMP2);
} suzuki001
------
suzuki001 |
poaivy
中階會員 發表:40 回覆:78 積分:53 註冊:2004-08-09 發送簡訊給我 |
請問你這個程式執行以後會出現啥效果呢?
是不是出現如果不是背景的話會出現黑白的圖?
//---
int d=abs((int)ptr3[x*3]-(int)ptr1[x*3]);只比較一個色階?
//---
ptr2[3*x 2]=ptr1[3*x];
ptr2[3*x 1]=ptr1[3*x]; //都取一個色?
ptr2[3*x]=ptr1[3*x];
小於的話則出現灰階圖?
//---
ptr2[3*x 2]=ptr1[3*x 2];
ptr2[3*x 1]=ptr1[3*x 1];
ptr2[3*x]=ptr1[3*x];
改這樣不知道會如何?
|
suzuki001
一般會員 發表:15 回覆:8 積分:4 註冊:2005-06-05 發送簡訊給我 |
|
poaivy
中階會員 發表:40 回覆:78 積分:53 註冊:2004-08-09 發送簡訊給我 |
|
suzuki001
一般會員 發表:15 回覆:8 積分:4 註冊:2005-06-05 發送簡訊給我 |
|
m58610
初階會員 發表:22 回覆:83 積分:36 註冊:2003-09-07 發送簡訊給我 |
|
suzuki001
一般會員 發表:15 回覆:8 積分:4 註冊:2005-06-05 發送簡訊給我 |
|
m58610
初階會員 發表:22 回覆:83 積分:36 註冊:2003-09-07 發送簡訊給我 |
|
suzuki001
一般會員 發表:15 回覆:8 積分:4 註冊:2005-06-05 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
|
suzuki001
一般會員 發表:15 回覆:8 積分:4 註冊:2005-06-05 發送簡訊給我 |
|
suzuki001
一般會員 發表:15 回覆:8 積分:4 註冊:2005-06-05 發送簡訊給我 |
不好意思,我的問題為
1.前景(Image3)減背景(Image1),將ptr2的值回存至Image2
2.我曾試可相減,但影像無法獨立出來???
3.原始的影像為RGB,經灰階(ptr[3*x]=ptr[3*x 1]=ptr[3*x 2]=(
ptr[3*x] ptr[3*x 1] ptr[3*x 2])/3,後才相減
4.只利用ptr[3*x]去判斷再回存至ptr2[3*x 1]及ptr2[3*x 2] 不知會不會不清楚呢? 感恩!!!! suzuki001
------
suzuki001 |
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
|
poaivy
中階會員 發表:40 回覆:78 積分:53 註冊:2004-08-09 發送簡訊給我 |
|
m58610
初階會員 發表:22 回覆:83 積分:36 註冊:2003-09-07 發送簡訊給我 |
suzuki001你好
你的程式最大的問題就是Timer跟Button5裡面的一些程式碼會互相干擾..
我測試過後是ForeGroundBitmap出現問題..
//ForeGroundBitmap=Image3->Picture->Bitmap;
這行會跟Timer裡的Form1->Image3->Picture->Assign(ForeGroundBitmap);衝到
所以我將它MARK起來.... //Image2->Picture->Assign(BMP2);
這行也是一樣會跟上面的BMP2=Image2->Picture->Bitmap;衝到
也不需要這樣寫... 再來就是你的三個Image的長寬要設定好..
因為你的程式裡將長寬寫死(320*240)... 上面這些問題其實多試試看可以解決..有問題再繼續討論摟
|
suzuki001
一般會員 發表:15 回覆:8 積分:4 註冊:2005-06-05 發送簡訊給我 |
引言: suzuki001你好 你的程式最大的問題就是Timer跟Button5裡面的一些程式碼會互相干擾.. 我測試過後是ForeGroundBitmap出現問題.. //ForeGroundBitmap=Image3->Picture->Bitmap; 這行會跟Timer裡的Form1->Image3->Picture->Assign(ForeGroundBitmap);衝到 所以我將它MARK起來.... //Image2->Picture->Assign(BMP2); 這行也是一樣會跟上面的BMP2=Image2->Picture->Bitmap;衝到 也不需要這樣寫... 再來就是你的三個Image的長寬要設定好.. 因為你的程式裡將長寬寫死(320*240)... 上面這些問題其實多試試看可以解決..有問題再繼續討論摟m58610您好: 我修改程式還會發生scanline index out of range?? 為什麼?? suzuki001
------
suzuki001 |
m58610
初階會員 發表:22 回覆:83 積分:36 註冊:2003-09-07 發送簡訊給我 |
|
suzuki001
一般會員 發表:15 回覆:8 積分:4 註冊:2005-06-05 發送簡訊給我 |
引言:suzuki001引言: m58610您好: 我修改程式還會發生scanline index out of range?? 為什麼?? suzuki001再來就是你的三個Image的長寬要設定好.. 因為你的程式裡將長寬寫死(320*240)... m58610您好: 您能幫看一下,為什麼還不行呢? void __fastcall TForm1::Button5Click(TObject *Sender) { capSetCallbackOnFrame (hCapWnd, &FrameCallBack); Byte *ptr1,*ptr2,*ptr3 ; ForeGroundBitmap=Image2->Picture->Bitmap; BackGroundBitmap=Image1->Picture->Bitmap; BMP3=Image3->Picture->Bitmap; ForeGroundBitmap->Height=Image2->Height; ForeGroundBitmap->Width=Image2->Width; ForeGroundBitmap->PixelFormat=pf24bit; BackGroundBitmap->Height=Image1->Height; BackGroundBitmap->Width=Image1->Width; BackGroundBitmap->PixelFormat=pf24bit; BMP3->Height=Image3->Height; BMP3->Width=Image3->Width; BMP3->PixelFormat=pf24bit; for (int y=0;y
------
suzuki001 |
m58610
初階會員 發表:22 回覆:83 積分:36 註冊:2003-09-07 發送簡訊給我 |
你好..
下面是修改你的0606程式的程式碼
沒有用你新的程式碼是因為有些東西你定義的不一樣
還有我也不清楚你有沒有修改Timer裡的東西
因為你新的程式碼有很多行會跟Timer衝到
不知道你對你程式中的每一行是不是都了解他的意思??
void __fastcall TForm1::Button5Click(TObject *Sender) { BMP2->PixelFormat=pf24bit; capSetCallbackOnFrame (hCapWnd, &FrameCallBack); Byte *ptr1, *ptr2,*ptr3 = NULL; BackGroundBitmap=Image1->Picture->Bitmap; BMP2=Image2->Picture->Bitmap; BMP2->Assign(BackGroundBitmap); for (int y=0;y發表人 - m58610 於 2005/06/13 01:56:49 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |