2013-04-10 5 views
7

を表示しない、私は、楕円を描くことCV ::スカラー画像フレームに期待色

void ellipse(Mat& img, Point center, Size axes, double angle, double startAngle, double endAngle, const Scalar& color, int thickness=1, int lineType=8, int shift=0)

を使用し、私は緑色enter image description here [RGB値に楕円の色を設定する(165、206 、94)]。 は、だから、私はまた、RGBの代替を試してみました

cv::Scalar(94.0, 206.0, 165.0, 0.0); // as BGR order, suppose the value is 0.0 - 255.0 
cv::Scalar(94.0/255.0, 206.0/255.0, 165.0/255.0, 0.0); // suppose the value is 0.0 - 1.0 

にパラメータconst Scalar& colorを設定します。

CV_RGB(165.0, 206.0, 94.0); // as RGB order, suppose the value is 0.0 - 255.0 
CV_RGB(165.0/255.0, 206.0/255.0, 94.0/255.0); // suppose the value is 0.0 - 1.0 

しかし、表示される色が[RGB値(255、255、255)]ではなく、所望の緑のenter image description here白です。

私はこの時点で迷ったことはありますか?どんな提案もお願いします。ありがとうございました。

EDIT:

私はここで全体の関連するコードを入れてみましょう。

self.videoCamera = [[CvVideoCamera alloc] initWithParentView:imgView]; 
[self.videoCamera setDelegate:self]; 
self.videoCamera.defaultAVCaptureDevicePosition = AVCaptureDevicePositionFront; 
self.videoCamera.defaultAVCaptureSessionPreset = AVCaptureSessionPreset352x288; 
self.videoCamera.defaultAVCaptureVideoOrientation = AVCaptureVideoOrientationPortrait; 
self.videoCamera.defaultFPS = 30; 
self.videoCamera.grayscaleMode = NO; 
[self.videoCamera adjustLayoutToInterfaceOrientation:UIInterfaceOrientationPortrait]; 

が続い呼ば[self.videoCamera start];後、(Mat&)imageがキャプチャされるだろうとCvVideoCameraDelegate方法- (void)processImage:(Mat&)image;で処理することができ、ここで楕円を描くためのコードです:

OpenCV iOS - Video Processingによると、これは - (void)viewDidLoad;CvVideoCamera configがあります
- (void)processImage:(Mat&)image { 

NSLog(@"image.type(): %d", image.type()); // got 24 

// image.convertTo(image, CV_8UC3); // try to convert image type, but with or without this line result the same 

NSLog(@"image.type(): %d", image.type()); // also 24 

cv::Scalar colorScalar = cv::Scalar(94, 206, 165); 
cv::Point center(image.size().width*0.5, image.size().height*0.5); 
cv::Size size(100, 100); 
cv::ellipse(image, center, size, 0, 0, 360, colorScalar, 4, 8, 0); 

}

は、最終的に、楕円は白ではなく、所望の緑の中です。

+0

コードの残りの部分を確認し、他の場所で色の値を変更していないことを確認してください。あなたが提供した部分は私のマシンに期待される緑の色を完全に示しています。 – Barshan

+2

多分あなたはフロートタイプの画像を持っていますか? [0 1]値の範囲は? – mrgloom

+0

@Barshan Das私はコードの残りの部分をチェックしコメントしましたが、色は変わりません。どちらがあなたのために働いていますか? – Protocole

答えて

2

mrgloomがコメント内で正しく指しているように、画像の種類[ellipse()関数でMat & img]を描画したいMatオブジェクトです。 cv :: Scalar(94,206,165)は、8UC3タイプの画像に望ましい緑色です。これらの値を32FC3イメージに設定すると、白色になります。

+0

申し訳ありません私を明確にしてください。私は 'image.type()= 24'を持っています。これは 'cv :: Scalar(94,206,166)'を白色にしますか? もしそうなら、適切な緑色を得るためにどのMat画像タイプに変換すべきですか? 'src.convertTo(dst、);'を使うだけでいいですか?ありがとうございました。 – Protocole

+0

はい、srcをconvertTo関数で変換できます。 src行列を構築する方法のコードを表示します。 – Barshan

+0

私は運がないイメージタイプを変換しようとしました。エディションの関連コードを参照してください。再度、感謝します。 – Protocole

1

あなたは

src.convertTo(SRC、CV_8UC3)を使用することができます。

ここで、CV_8UC3は、8ビットの符号なしcharと3色のイメージ表現を使用することを意味します。 詳細はこちらOpenCV docs その後、コード全体の投稿に役立たない場合は、楕円が緑色になります。

+0

あなたの答えは成功しなかった。エディションの関連するコード全体を参照してください。ありがとうございました。 – Protocole

0

私は同様の問題を抱えていましたが、まず画像をBGRに変換して修正しました。だからあなたの場合にprocessImage機能として次のようになります。

-(void)processImage:(Mat&)image 
{ 
    cvtColor(image, image, CV_RGBA2BGR); 
    cv::Scalar colorScalar = cv::Scalar(94, 206, 165); 
    cv::Point center(image.size().width*0.5, image.size().height*0.5); 
    cv::Size size(100, 100); 
    cv::ellipse(image, center, size, 0, 0, 360, colorScalar, 4, 8, 0); 
} 

私はあなたのコードに含まれている唯一の行は次のようになります。

cvtColor(image, image, CV_RGBA2BGR); 

あなたもチャンネル、深さを記録し、上記の情報を入力した場合この関数は次のように:

:あなたが変換の前に表示されます ​​

channels 3 
depth 0 
type 16 
element size 3 

CV_8UC3である:私はCV_8UC4で、変換後にそれがなると考える

私はcvtColorなしで動作しない理由の1つは、opencv documentationで説明したように、ターゲット画像が4チャンネルの場合、opencv描画関数がアルファ透明度をサポートしていないことです。したがって、CV_RGBA2BGRを変換することにより、アルファチャンネルを取り出すことができます。しかし、私がそうすれば私はそれを働かせることができないと言っている:

cvtColor(image, image, CV_RGBA2RGB); 

この赤と青の色はイメージで反転されています。だから、それは動作するようだが、私はそれが実際の理由かどうかわからない。

9

alphaを255に設定するとこの問題を解決できます。 スカラ(94,206,165,255)

+0

をどうぞ。 – Irfan

+1

私はどのようにこれが私のために働いたのか分かりません。 – bakalolo

関連する問題