Re: [問題] Flash中webcam問題

看板Flash作者 (lenny)時間17年前 (2008/03/07 01:57), 編輯推噓2(202)
留言4則, 2人參與, 最新討論串3/6 (看更多)
http://langrisser1981.blogspot.com/2008/02/blog-post_9062.html 這我之前做的 你應該是想做像這樣的東西沒錯吧 我當初是用flash寫的 老實說如果用director會比較快,因為有現成的外掛可以用,而且速度比較快 flash也行,國外有很多範例可以看 當時我是自己寫了一個小小的公式來計算,也有寫成元件方便使用 不過原理很重要 我來說說我是怎麼思考的 繼續往下之前確認兩件事 1.你會用photoshop,或是影像處理,知道什麼叫做混色模式(blending mode) 2.你知道什麼叫做位元運算子(bitwise operator) 不知道的話,你應該永遠也做不出來偵測影像的程式...囧rz 首先,你用getPixel() 只能知道顏色 除非你帶了一個黑手套,然後在一個白畫面前面晃,這樣的反差抓顏色才有意義 不然你的程式會誤差到一個很可怕的程度 所以我的想法很簡單,我要知道“畫面的那個地方是有動作的” 也就是前面一個畫面,跟目前這個畫面,它的差別在哪裡 如果有用過photoshop,思考一下,假設現在你有兩張圖 畫面上的背景是黑色,上面都有一個紅色的圓 但是一張圖的圓在中間偏左,另一張在中間偏右 你要怎麼找出她們重疊的那一塊,跟不同的地方 很簡單,先把其中一張顏色反轉,再跟另一張圖作聯集運算就可以 我想有用過的人應該都會這招,這招就是我們要做的 換成數學表示,原理就是 首先我先把該點像素的顏色拆開,rgb值都分別拆開 假設該點像素是紅色,所以他的rgb值是0xff0000,我們用變數color代表 r=(0xff0000&color)>>16; g=(0x00ff00&color)>>8; b=(0x0000ff&color); 這樣你就得到了 r,g,b三個channel的值 這時候你可以把結果先轉成灰階化,但是因為這邊我知道我只要抓紅色 所以我只取r channel的結果 轉灰階化也不難啦,我都直接這樣轉 (0.3*r)+(0.6*r)+(0.1*b) 總之最後你會得到一個值,它的範圍是0~255...這就是重點 把這個值轉成二進位表示 以這個例子為例,畫面不是紅就是灰 所以這個值如果不是0xff(red channel)不然就是0x00(黑) 我把該值轉二進位表示,紅色就等於11111111,黑色就等於00000000 你把兩個畫面的“同一個取樣點”都做同樣的計算 好了以後 先把其中一個做not運算 假設在上一個畫面的時候,這一個取樣點是紅色 所以取到的值等於11111111,做not(!)運算,結果等於00000000(在此以a代表) ! 11111111 __________ a:00000000 接下來假設這個畫面紅圈移動開了,所以同樣的取樣點取到黑色 值等於00000000(在此以b代表) 把a跟b做or(|)運算 a:00000000 b:00000000 |_________ c:00000000 答案會是全黑 同樣的情況,我假設這個取樣點取到一樣是紅色 值等於11111111(在此以d代表) a:00000000 d:11111111 |_________ e:11111111 答案會是全白 所以我就是用這個法來判斷 白色就代表這個點的像素沒有改變過,越黑就代表改變越大 沒錯,用這個方式還可以知道改變的幅度 既然知道哪個像素被更動了,就知道哪個點發生作用 這樣就可以作後續偵測了 當然怎樣設取樣點,怎樣最佳化,這要自己去調整 不過概念是這樣沒錯 說到這邊,完... ※ 引述《gargouille (lol)》之銘言: : ※ 引述《yakeilee (嘟嘟啊~台南處處有好人)》之銘言: : : 如果要用Flash中的webcam偵測畫面中的顏色區塊 : : 是否是要從Bitmap中擷取?? : : 真的不知道要從哪個指令下手編寫 : : 之前有大大推薦我要先去看help : : 我看了...只找到偵測activity 事件 : : 拜託大大們指導迷津一下Orz : : 或者是有沒有相關教學的書籍或網站可以推薦的?? : : 我看help看到眼睛快脫窗了~還是寫不出來>"< : 正好我最近也想做這個相關的題目 : 我還沒有什麼成果出來 : 不過我想用的是 : BitmapData.getColorBoundsRect() : 或 : BitmapData.getPixel() : 這兩個去做吧 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.169.51.117

03/07 02:38, , 1F
感謝~ 這真實用
03/07 02:38, 1F

03/07 14:20, , 2F
挖~~其實之前我找的資料中就有說過用direct做比較好
03/07 14:20, 2F

03/07 14:21, , 3F
但是後來接觸到一位外國學者建議我用FLASH做....
03/07 14:21, 3F

03/07 14:21, , 4F
因此我才會在這邊提出疑問...謝謝你提供這些資訊^^ 好人
03/07 14:21, 4F
文章代碼(AID): #17q32Ih3 (Flash)
文章代碼(AID): #17q32Ih3 (Flash)