自宅サーバでLiveカメラ(2)
 STV680カメラだとR(赤)とB(青)が入れ替わってしまう!  (2003/01/11)

 長崎の高橋さんという方から「このページのix-1でキャプチャされた画像はR(赤)とB(青)が入れ替わってませんか?」というメールをいただきました。

←これもそうなんですが,曇り空ながら妙に赤茶けた写真です。
僕は「ホワイトバランスが狂ってるんだ」と思いこんでたんですが,そうではありませんでした。

これをご覧ください。
青リンゴではありません。
普通の赤いリンゴなのです。(^_^;)
うちのパソコンの周りは白とか黒ばっかりなので気がつかなかったというわけです。

高橋さんにソースコードの修正点を教えていただいてコンパイル,再インストールしたwebcamで撮った写真です。
今度は正しい色で記録されています。
Che-ez!SPYZなどでも同じ問題が発生するようですから,ここでハマっている人もいるんじゃないでしょうか。
貴重な情報だと思うので以下で修正方法をご説明しましょう。
高橋さん,ありがとうございました。m(_ _)m

まず,ここでxawtv_3.73.tar.gz をダウンロードしてきてtarします。 ( #tar xvzf xawtv_3.73.tar.gz )
解凍するとできるディレクトリxawtv-3.73のwebcamというディレクトリの中にあるwebcam.cをエディタで編集します。 (最新版のxawtv_3.82だと撮影間隔を決めるオプションdelayがうまく働きませんでした。なぜかなあ?)
webcam.cの真ん中あたりにこんな↓所があるんですが,高橋さんの説明によると「実はここは回転をかける所なんですがR,G,Bを一個ずつコピーしていますので,RとBのコピーを入替えればいいのです」ということだそうです。

    case 0:
	for (j = 0; j < oh; j++) {
	    int ir = (j+top)*w+left;
	    int or = j*ow;
	    for (i = 0; i < ow; i++) {
		rotimg[3*(or + i)]   = in[3*(ir+i)];  ←ここがR
		rotimg[3*(or + i)+1] = in[3*(ir+i)+1];←ここがG
		rotimg[3*(or + i)+2] = in[3*(ir+i)+2];←ここがB
	    }
	}
	*wp = ow;
	*hp = oh;
	break;

したがって,次のように修正します。

		rotimg[3*(or + i)]   = in[3*(ir+i)+2]; 
		rotimg[3*(or + i)+1] = in[3*(ir+i)+1]; 
		rotimg[3*(or + i)+2] = in[3*(ir+i)];  

# make
# make install
あとはmakeしてmake installするだけです。
webcamは,usr/local/bin/ にできてました。

$ /usr/local/bin/webcam

適当に.webcamrcを作ってからwebcamを実行してやります。
ちゃんとした色でキャプチャできてるはずですヨ。

【2005年1月16日 追記】
長崎の高橋さんから,次のような情報が寄せられました。
上のように,ソースを書き換える必要はないんだそうです。
xawtvのSTV680モジュールにはRB入替えオプションがすでにあり、
そのオプションをmodprobeで設定すれば良いそうです。
#modprobe stv680 swapRGB_on=1
とすればRとBが入れ替わるようです。
一回一回手で設定するは面倒ですので起動時に実行するよう設定すれば良いかと思います。 (/etc/modules.confとか/etc/rc.localとかのファイルに追加)


そうだったのか〜(^^;) どうもありがとうございました。



Linuxで自宅サーバ 
\1980のジャンクPCで自宅サーバ  
ノートPCにNFSインストール  
自宅サーバでHPを公開しよう
CGIを使ってみよう
WebDAVを使ってみよう(1)
WebDAVを使ってみよう(2)
kernelの再構築(VineLinux2.5)
自宅サーバでLiveカメラ
自宅サーバでLiveカメラ(2)
Wormの攻撃
ADSLの導入とIPアドレス自動更新
DiCE for Linux
メールサーバ(Postfix)の設定



【Top Page】