サイズが同じ2枚のbmp画像(img1とimg2)の色をピクセルごとに比較し、同じ色ならそのピクセルを白、違う色なら黒にして、3枚目(img3)の画像を生成するコードを書いています。
imgとimg2は同じ画像ですが、img2にのみ「あ」という文字が書いてあります。うまくいけばimg3には、白い背景に「あ」と黒く表示されるはずです。
ところが、結果に「あ」と表示されません。ピクセル単位で比較していますが、白い背景に、まだらなな黒色と、2~3ミリ四方の同じ大きさの黒い四角形もたくさん(規則的にではなく、ランダムに)表示されます。
img1と2と3が、それぞれ違うピクセルを参照しているのだろうかと、自分なりに調べていますが、どこがまずいのかわからず困っています。どなたかおわかりになれば、ぜひアドバイスをいただけると助かります。
どうぞ宜しくお願い致します。
===
int
main (int argc, char :: argv)
{
int x, y, i;
uchar p1[3], p2[3];
IplImage *img1, img2, img3;
img1 = cvLoadImage ("D:\\...\\ichimaime.bmp", CV_LOAD_IMAGE_COLOR);
img2 = cvLoadImage ("D:\\...\\nimaime.bmp", CV_LOAD_IMAGE_COLOR);
img3 = cvCreateImage(cvSize (100, 100), IPL_DEPTH_8U, 3);
cvZero (img3);
for (y = 0 ; y < img1->height; y++) {
for (x = 0 ; x < img1->width, x++) {
//一枚目の画素値
p1[0] = img1->imageData[img->widthStep * y + x * 3]; // B
p1[1] = img1->imageData[img->widthStep * y + x * 3 + 1]; // G
p1[2] = img1->imageData[img->widthStep * y + x * 3 + 2]; // R
//二枚目の画素値
p2[0] = img2->imageData[img->widthStep * y + x * 3]; // B
p2[1] = img2->imageData[img->widthStep * y + x * 3 + 1]; // G
p2[2] = img2->imageData[img->widthStep * y + x * 3 + 2]; // R
if ( p1[0]!=p2[0] || p1[1]!=p2[1] || p1[2]!=p2[2] ) { /*もし違う色なら黒にする*/
img3-> imageData[img3->widthStep * y + x * 3] = 0;
img3-> imageData[img3->widthStep * y + x * 3 +1] = 0;
img3-> imageData[img3->widthStep * y + x * 3 +2] = 0;
}else{ /*もし同じ色なら白にする*/
img3-> imageData[img3->widthStep * y + x * 3] = 255;
img3-> imageData[img3->widthStep * y + x * 3 +1] = 255;
img3-> imageData[img3->widthStep * y + x * 3 +2] = 255;
}
}
}
cvNmaedWindow(“Image”, CV_WINDOW_AUTOSIZE);
CVsHOWiMAGE (“Image”, img3);
cvWaitKey(0);
cvDestroyWindow(“Image”);
cvReleaseImage (&img1);
cvReleaseImage (&img2);
cvReleaseImage (&img3);
return 0;
}
===
No.1ベストアンサー
- 回答日時:
書き写したのでしょうか、このプログラムにはいろいろ間違いが多くてそのままでは動かなかったですが、文法間違いを直したら、白地に黒で文字が浮びましたよ。
それぞれの画像サイズは同じ100x100ですか?
> //一枚目の画素値
> p1[0] = img1->imageData[img->widthStep * y + x * 3]; // B
> p1[1] = img1->imageData[img->widthStep * y + x * 3 + 1]; // G
> p1[2] = img1->imageData[img->widthStep * y + x * 3 + 2]; // R
> //二枚目の画素値
> p2[0] = img2->imageData[img->widthStep * y + x * 3]; // B
> p2[1] = img2->imageData[img->widthStep * y + x * 3 + 1]; // G
> p2[2] = img2->imageData[img->widthStep * y + x * 3 + 2]; // R
となってますけど、それぞれ
p1[0] = img1->imageData[img1->widthStep * y + x * 3]; // B
p2[0] = img2->imageData[img2->widthStep * y + x * 3]; // B
になってますか?
img1,img2はちゃんと 8bit、3チャンネルになってますか?
大変申し訳ありません、せっかくお返事いただいたのにお礼とクローズをしていませんでした。
アドバイスくださってすぐに画像を確認し、
念のため画像を入れ替えたところうまくいきました。
すぐに解決することができました、ありがとうございました。
重ねて、お礼が遅くなりましたことをお詫びいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 経済学 資本移動や価格変動のない次のような固定為替レート・モデルを考える。 C = 10 + 0.8 Y I 3 2022/06/21 20:50
- 工学 制御工学の問題について 1 2022/10/22 17:42
- Excel(エクセル) セル内の一部に別セルを差し込む 3 2022/09/18 04:39
- 英語 Im so happy really with all my hearth for yours wo 3 2022/06/12 21:49
- 工学 制御工学の問題について 1 2022/10/22 11:06
- 英語 意味を教えてください 1 2022/08/18 21:29
- 数学 (4)のim(T)をu1,u2,u3の線型結合で表せ、という問題がわからないです。回答を見ると私の解 2 2023/05/31 22:14
- 地球科学 長万部町の神社付近地中から30メートル高の水柱が噴出。 2 2022/08/14 22:26
- 英語 in my hands の発音 4 2022/07/16 08:21
- 物理学 おしえてほしい。aはわかりましたが、bが12lxになるのですが?選択肢に解答がありません。 問題は図 2 2023/04/10 23:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JavaScriptで変更した属性の元...
-
外部javascriptの重複を防ぐには
-
VC++2005で画面上にGIF画像(透...
-
OpenCVで固定枠で画像を操作す...
-
"lightbox"の"CLOSE"ボタンクリ...
-
Vb.net2005での画像の合成方法
-
onclickで画面が固まる・・・ら...
-
nodejsの画像表示は特別なこと...
-
画像が表示でnull; this.src
-
色の変更
-
プログラムの上手な書き方は?
-
OpenCV での画素値の比較について
-
複数の画像をフェードイン・ア...
-
error LNK2019 未解決のシンボ...
-
MAX関数を使ってからLEFT JOIN...
-
jqueryのsortableで一部ソート...
-
createElementで作成した要素を...
-
変数内容をHTML内で表示する方法
-
指定したパスが現URLに含まれて...
-
読み込んだQRコードをフォーム...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JavaScriptで変更した属性の元...
-
MFCで画像を表示させているので...
-
【OpenCV】二値画像後、白の部...
-
外部javascriptの重複を防ぐには
-
Vb.net2005での画像の合成方法
-
pythonで、tkinterとpillowの組...
-
html内にスライドショーを複数設置
-
ラズパイでno module named zbar
-
リンク先を動的に変更する
-
外部ファイルにしたら文字化け...
-
プログラムの上手な書き方は?
-
libjpegライブラリの使い方につ...
-
error LNK2019 未解決のシンボ...
-
複数画像のランダム複数表示(...
-
pythonのpygameでキャラクター...
-
imgボタンにfocusの当て方
-
nodejsの画像表示は特別なこと...
-
<noscript>と</a>の関係
-
OpenCVで固定枠で画像を操作す...
-
(javascript)HTMLで指定した...
おすすめ情報