OpenCV2.0のcvLoadImageで16bitカラーのtiff画像読み込んだら、
勝手に8bitカラーに圧縮して読み込まれてしまうようなんですけど、これは仕様ですか?
オンラインマニュアル見ても特に記載されていないので・・・。
ソースを秘匿したままでどうしろと?
なぞなぞの答えは第2引数を書いてない。では?
CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR
940 :
937:2010/03/09(火) 00:34:02
すいませんでした。
>>939 いえ、第2引数もそのように指定して、
IplImage* tmp = cvLoadImage("test.tif",CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
としても、tmp->depthがIPL_DEPTH_U8となっていて、実際にtmp->imageDataに格納されている
画素配列を確認しても8bitに変換されている状態でした。
サンプル画像は
http://dl.maptools.org/dl/libtiff/の pics-3.8.0.tar.gzのflower-rgb-contig-16.tifを使用しました。
あ、ちがったか。失礼。
PNGだと読めるみたいだけどtifだとダメみたいですね
grfmt_tiff.cpp見ると8bitにしか対応してないような気もする
サンプル画像数100でcreatesamples.exeを実行してるんですが、
3週間近く経っても実行完了しない。
サンプル画像の縦横比はそろえてるんだけどなぁ。
比だけでなく縦の長さ、横の長さ自体をそろえないとダメですかね?
それとももっと別の理由でしょうか。
createsamplesって一瞬で終わるものだぞ。
サイズはテキストに書いて指定する。
実際に3週間も待つとはずいぶんと気長な人だなあ
OpenCVを勉強しようと思ってEssential OpenCVって本を買ったら1.0を使用してたんだけど、1.0をダウンロードして使ったほうがいいのかな?
それとも2.0で使ってても問題無いですか?
946 :
138:2010/03/16(火) 02:08:10
とりあえず、1.1との違いが書いてあったので1.1で勉強してみることにしました。
Cなら2.0でもあまり変わらない
948 :
945:2010/03/17(水) 02:24:17
2.0を入れて本の通りにいくつかやってみましたが、特に問題は無さそうですね。
1.1と2.0は関数名とかも同じなのかな?
ほぼ同じ。
変わったものもあるけど、コンパイルエラーが出てからググれば大丈夫。
画像から任意の三角形を抜き出したいんだけど、マスクを使わずに
座標指定だけでやる方法ってある?
三角形から外接の四角形を作りX,Yの点ごとに点が三角形の中にあるか否かを判断し中なら取り出すとか
をやるくらいならマスクのほうがいいな
>>950 水平ラインごとに三角形内部の始点と終点座標を求めればOK。小学校の算数レベル。
マスクを使わずにってのはマスク画像を自分で用意せずにっていう意味だと勝手に解釈
ならマスク画像を3点の座標からopenCVで描けばいいよね
UbuntuでOpenCVやろうとしてるんですが、DVカメラ(所謂ハンディカム)からはキャプチャできないのでしょうか?
>>950 どうせ取り出すときにマスク範囲と同じ領域が
必要だからマスクのほうが効率いいんじゃない?
ctypes_opencvとopencv2.0に付属のpythonインターフェイスはどっちがお勧め?
openCVに付属してる奴は自分でCの関数書くとそれをpythonから簡単に読めなかった記憶あるんだけど
OpenCVデフォルトのpython interface生成方法がすごい変すぎる
なんでctypes使わないの?
OpenCVの癖のあるC++はVisual Studioでないと読めない
emacsでは無理なのか
OpenCV2.0をVisualStudioで使おうとcmakeからビルドしたら
サンプルプログラムの実行をVisualStudioからできない
コンパイルしたのを直接動かすことはできる
VisualStudioでデバックしながら実行したいのに
961 :
デフォルトの名無しさん:2010/04/03(土) 03:26:55
失礼します。
画像ファイルから動画を作りたいと思っているのですが、以下のプログラムを実行しても、最初の画像しか出てきません。
自分としては2枚目の画像が2秒後に出るように作ってみたつもりなのですが・・・。
また、コーデックで無圧縮AVIは使えるのでしょうか?//にしている部分を実行してみたところ、エラーになりました。
良かったら、どこが間違っているのか教えてください。
WindowsXPでOpenCV1.1preを使用しています。言語はC++/CLIです。
よろしくお願いします。
CvVideoWriter* rec;
CvSize sz;
sz = cvSize(640,480);
rec = cvCreateVideoWriter("D:\\Test.avi",CV_FOURCC('P','I','M','1'), 120, sz,1); // MPEG-1
// rec = cvCreateVideoWriter("D:\\Test.avi",CV_FOURCC('D','I','B',' '), 120, sz,1); // 無圧縮AVI?エラーになる
IplImage* img1 = cvLoadImage("D:\\tmp.bmp");
cvWriteFrame(rec,img1);
IplImage* img2 = cvLoadImage("D:\\tmp2.bmp");
cvWriteFrame(rec,img2);
cvReleaseImage(&img1);
cvReleaseImage(&img2);
962 :
961:2010/04/03(土) 19:10:12
いちおー自己解決しました。
MPEG-1コーデックが壊れていたらしいです。
>>955 1394以外だったらキャプチャボードが必要
964 :
デフォルトの名無しさん:2010/04/08(木) 02:21:21
OpenCV始めて1日目です
IplImage* img = cvLoadImage("CMYK.TIF", CV_LOAD_IMAGE_ANYCOLOR);
↑でフォトショで作ったCMYKのTIFF画像を読み込んだのですがimg->colorModelを参照するとなぜかRGBになっています
勝手にRGB変換されてしまうのでしょうか?CV_LOAD_IMAGE_ANYCOLORをつけているのですが・・・
OpenCVでCMYKを正しく扱うにはどうすればいいですか?
>>964 そのTIFF画像のRGBにCMYK時の色が付いてるんだろ
それってRGBに変換されてるってことじゃね
TIFF画像がCMYKで保存されているか調べる方が先だろ
RGBで読まれるだろ
いやなら変換しろ
ubuntu10.04はOepnCV2.0がパッケージで入るみたいだよ
VisualStudio2010出たみたいだけど
OpenCVは対応したのかな
OpenCV2.1には特に書いて無かったよな
まぁ2010でも問題無いだろう
VS2010は何かdllたりなくてビルド失敗するらしいとブログに書いてあった
そのブログがどこか分からんので何ともいえんが、
2010express単体だとopenmpライブラリ無くて使えないから
windowssdk7.1を待つしかないな
cmakeのオプションでopenmpはずせるよ
976 :
デフォルトの名無しさん:2010/04/15(木) 16:54:35
USBカメラからキャプチャするプログラムを試してます。
http://opencv.jp/sample/video_io.html このサンプルプログラムをそのまま使っています。
ビルドもエラー無くでき、カメラは認識するんですが映像が映りません。
環境はVisial C++ 2008 OpneCV1.0 カメラはMicrosoft Life Cam VX-7000です。
設定などは全部できました。
素直に2.0以降を使いましょう。
1.0だとDirectShow経由で画像取得してる例がいくつかあるね。
cvFindContours で線形上のエッジを検出した後、そのエッジの始点〜終端までの
距離(ピクセル数ではない)を求めたいのですが、どのような方法が一般的でしょうか?
例えば斜めの線だと、2点間の距離はピクセル数ではない為、
線を書いてピクセル数を数える方法では対応できませんでした。
ピクセル数じゃない距離って何?
>>978 勉強不足ですみません。例えば X1=1 Y1=1 ピクセルを P1、X2=5 Y2=6 ピクセルを P2 とすると
2つの座標間を線を書くなどして現すと■のような軌跡で6ピクセルとなりますが、
これは X2-X1 か Y2-Y1 のどちらか大きい方の移動量を現すだけで、点間の距離ではありません。
P1とP2の距離を座標で計算すると SQRT((5-1)^2+(6-1)^2) で、距離は 6.403 になると思います。
■(←P1:1,1)
□■
□□■
□□□■
□□□■
□□□□■(←P2:5,6)
>>980 直線しか検出しないの?
2値化されているなら、
while(1){
■(X,Y)の場所から上下左右の9ピクセルの中から
上の座標以外で■のある場所を探して、その座標をX,Yに
■が無かったらbreak;
}
>>980 ではどちらか大きい方を選べばいいんじゃ?
len = max ( abs(X2-X1), abs(Y2-Y1) ) + 1;
上下左右への移動は1
斜め移動は√2で計算すればいいんじゃないの?
>>980 その距離が欲しいなら、その距離を計算すればいいんじゃないの?
等高線の長さが欲しいなら、擬似的には>983でいいし。
>983で>980の状況なら、等高線の長さは4√2+1で約6.66になるね。
985 :
980:2010/04/19(月) 21:10:34
皆さん
アドバイスありがとうございます。
983さんの方法が近似的に計算できそうなので、この方法で考えてみます。