全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2451
推到 Plurk!
推到 Facebook!

影像相減二值化

答題得分者是:istillloving
dmjohnny
一般會員


發表:3
回覆:9
積分:2
註冊:2008-10-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-01-14 15:18:42 IP:122.117.xxx.xxx 訂閱
我最近嘗試用線在這張FRAME去減上一張FRAME
但是影像相減完後做二值化的時候卻只有上面一小塊有二值化到其他地方都是白的
請問該怎麼解決這個問題?
以下是我做影像相減的程式碼

[code cpp]
void frame_diff(int *f1,int *f,int w,int h,int *g)
{
int i,j;
int red,green,blue;
int gray;
for(j=0; j {
for(i=0; i {
//相鄰影像相減
g[i*3 j*w*3]=f[i*3 j*w*3]-f1[i*3 j*w*3];
g[i*3 j*w*3 1]=f[i*3 j*w*3 1]-f1[i*3 j*w*3 1];
g[i*3 j*w*3 2]=f[i*3 j*w*3 2]-f1[i*3 j*w*3 2];
//轉灰階
blue = f[i*3 j*w*3];
green = f[i*3 j*w*3 1];
red = f[i*3 j*w*3 2];
gray = 0.299*red 0.587*green 0.114*blue;
g[i*3 j*w*3] = gray;
g[i*3 j*w*3 1] = gray;
g[i*3 j*w*3 2] = gray;
//二值化
if(g[i*3 j*w*3]<10)
{
g[i*3 j*w*3] = 0;
g[i*3 j*w*3 1] = 0;
g[i*3 j*w*3 2] = 0;
}
else
{
g[i*3 j*w*3] = 255;
g[i*3 j*w*3 1] = 255;
g[i*3 j*w*3 2] = 255;
}
}
}
}
[/code]


istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-01-14 16:30:50 IP:218.169.xxx.xxx 訂閱
我想你應該要

把 g f f1 怎麼宣告的說明一下吧

還有它是怎麼存進影像的

------
恩...
編輯記錄
istillloving 重新編輯於 2010-01-14 22:52:39, 註解 無‧
dmjohnny
一般會員


發表:3
回覆:9
積分:2
註冊:2008-10-01

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-01-14 23:47:06 IP:118.171.xxx.xxx 訂閱
很抱歉我忘了說了

我的f是我的來源影像
f1是我的前一張影像
g則是我的輸出影像

附註我不是讀影片檔
我是讀一串連續的圖片


編輯記錄
dmjohnny 重新編輯於 2010-01-14 23:49:00, 註解 無‧
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-01-14 23:49:58 IP:218.169.xxx.xxx 訂閱
我是說程式的部份
------
恩...
dmjohnny
一般會員


發表:3
回覆:9
積分:2
註冊:2008-10-01

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-01-14 23:56:43 IP:118.171.xxx.xxx 訂閱

[code cpp]
if(f1!=NULL)
{
frame_diff(f1,f,w,h,g);
}
delete [] f1;
f1=f;
array2bmp(g,w,h,pBitmap);
bmp_disp(pBitmap,Image2);
Data ;
if(Data == 300)
{
//Timer1->Enabled = false;
Data = 0;
}

[/code]
上述那段程式碼就是
如果我的影像大於一張我就進入做影像相減
之後我就把下一次讀進的圖片丟進f1中
data是我的檔名,檔名已經事先修改成0~299
因為我不太懂您的意思
如果有需要的話我在把我整隻程式上傳上來

istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-01-15 10:18:49 IP:218.169.xxx.xxx 訂閱
我是說 他是怎麼new出來的

怎麼存圖片資訊的

整個流程你只有PO兩個buff相減而已
------
恩...
dmjohnny
一般會員


發表:3
回覆:9
積分:2
註冊:2008-10-01

發送簡訊給我
#7 引用回覆 回覆 發表時間:2010-01-15 18:40:12 IP:118.171.xxx.xxx 訂閱

[code cpp]
int p;
int *fn,*f1;
f1 = new int[w*h*3];
fn = new int[w*h*3];
g = new int[w*h*3];
AnsiString FileName = IntToStr(Data) ".bmp";
Image1->Picture->LoadFromFile(FileName);
f = bmp2array(Image1->Picture->Bitmap,&w,&h);
copy(f,w,h,fn);
Data ;

[/code]
會給她W*H*3的是因為是彩色圖片

istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#8 引用回覆 回覆 發表時間:2010-01-15 19:39:30 IP:140.127.xxx.xxx 訂閱
bmp2array 這個你是call函式的嗎

===================引 用 dmjohnny 文 章===================

[code cpp]
int p;
int *fn,*f1;
f1 = new int[w*h*3];
fn = new int[w*h*3];
g = new int[w*h*3];
AnsiString FileName = IntToStr(Data) ".bmp";
Image1->Picture->LoadFromFile(FileName);
f = bmp2array(Image1->Picture->Bitmap,&w,&h);
copy(f,w,h,fn);
Data ;

[/code]
會給她W*H*3的是因為是彩色圖片

------
恩...
dmjohnny
一般會員


發表:3
回覆:9
積分:2
註冊:2008-10-01

發送簡訊給我
#9 引用回覆 回覆 發表時間:2010-01-15 20:36:14 IP:118.171.xxx.xxx 訂閱
是的,我都分開寫了
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#10 引用回覆 回覆 發表時間:2010-01-16 09:10:16 IP:220.129.xxx.xxx 訂閱
所以大哥..你還是ㄧ次把它PO出來吧...=..=

這樣我問一個你PO一個...
------
恩...
dmjohnny
一般會員


發表:3
回覆:9
積分:2
註冊:2008-10-01

發送簡訊給我
#11 引用回覆 回覆 發表時間:2010-01-16 15:53:39 IP:118.171.xxx.xxx 訂閱
感謝您回我,我剛剛發現我的錯在哪了
我錯的地方是在我二值化的地方
因為設的值太小了
感謝您的指導
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#12 引用回覆 回覆 發表時間:2010-01-16 21:23:59 IP:218.169.xxx.xxx 訂閱
你這好像跟一般的運動估測的方法不ㄧ樣厚...
------
恩...
系統時間:2024-04-26 18:33:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!