プロが教える店舗&オフィスのセキュリティ対策術

問題がどうしてもわかりません。
ご指導のほどよろしくお願いいたします。
int main( int argc, char** argv )
{

Mat image = imread("test.png",1 );
Mat new_image = Mat::zeros( image.size(), image.type() );

for( int y = 0; y < image.rows; y++ )
{
for( int x = 0; x < image.cols; x++ )
{
for( int ll = -1; ll < 1; ll++ )
{
for(int mm=-1; mm<1; mm++)
{
uchar ff1 = image.at<uchar>(x+ll,y+mm);
new_image.at<uchar>(x,y) +=ff1;
}
}
}
}

namedWindow("Original Image", 1);
namedWindow("New Image", 1);

imshow("Original Image", image);
imshow("New Image", new_image);

waitKey();
return 0;
}

A 回答 (4件)

> ご回答ありがとうございます。


> なれど、実行の結果は
> Unhandled exception at at 0x76C8C41F in ConsoleApplication9.exe: Microsoft C++ exception: > cv::Exception at memory location 0x0016F1D8.

メモリ関係の例外であることは分かりますが、アドレスの情報は他の人には無意味ですし、これ以上のアドバイスは難しいです。一応、わたしの手元の環境では正常に動作していますし。

それと基本的なことですが、まず全てを確認をされた方がよいでしょう。マニュアルなどをきちんと見て。at()の引数のような単純ミスが他にありませんか?

それでも分からなければ、デバッグモードでコンパイルしてどこで例外が起きているか、その時の座標値がどうなっているか、デバッガで追跡されるのがよいでしょう。

この回答への補足

ご回答ありがとうございます。
実は、今までずっとデバッグモードでコンパイルしています。
あなたの手元の環境では正常ということは、コード自体が問題ありませんか?

補足日時:2013/05/03 14:05
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!!!!!!
「あなたの手元の環境では正常」この言葉が大きなヒントです。
ヘッドファイルが足りないのが原因です。
やっと3週間と戦ってきた問題とさよならです。
ありがとう!!!!!!!!!!!!!

お礼日時:2013/05/03 14:10

#2さんの指摘もありますが、それ以前に at() の引数のx座標とy座標が逆のようです。



また imread() でカラー画像として test.png ファイルを開いているようですが、グレー画像のように画素にアクセスしています(at<uchar>でuchar型の輝度1つごと)。

ところで、そもそも何をされたいのでしょう。3x3の平滑化でしょうか。だとすれば ll < 1 と mm < 1 の判定もおかしいです。2x2になってしまいます。


下のようなことをされたいのではないでしょうか?

for( int y = 0; y < image.rows; y++ )
{
for( int x = 0; x < image.cols; x++ )
{
for( int ll = -1; ll <= 1; ll++ )
{
for( int mm = -1; mm <= 1; mm++ )
{
if (x+ll >= 0 && x+ll < image.cols &&
y+mm >= 0 && y+mm < image.rows)
{
Vec3b &ff1 = image.at<Vec3b>(y+mm, x+ll);
new_image.at<Vec3b>(y,x)[0] += ff1[0] / 9;
new_image.at<Vec3b>(y,x)[1] += ff1[1] / 9;
new_image.at<Vec3b>(y,x)[2] += ff1[2] / 9;
}
}
}
}
}

この回答への補足

ご回答ありがとうございます。
なれど、実行の結果は
Unhandled exception at at 0x76C8C41F in ConsoleApplication9.exe: Microsoft C++ exception: cv::Exception at memory location 0x0016F1D8.

補足日時:2013/05/02 09:25
    • good
    • 0

>uchar ff1 = image.at<uchar>(x+ll,y+mm);



で、画像のピクセル値あたりを取得しているんでしょうかね?
画像の座標でX座標が-1、Y座標が-1っていう指定だとドコになるのかがまずギモンですが。
左上が原点だとすると、さらにそこより左家のピクセルですかね?
# っていうか、-1,-1って座標指定したからオーバーフローしているだけなんじゃないですか?

この回答への補足

ご回答ありがとうございます。
たしかにオーバーフローやもしれぬのですね、気付かなかったのです

補足日時:2013/05/02 09:27
    • good
    • 0

エラーコードやエラー内容なども提示される方が良いと思いますよ。

この回答への補足

Unhandled exception at at 0x7599C41F in ConsoleApplication9.exe: Microsoft C++ exception: cv::Exception at memory location 0x0040F370.

補足日時:2013/05/01 13:16
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!