1

この質問は似ていますが、答えられたことはありません: OpenCV filtering part of image

私はopencv2とc ++を使用しています。300x200 などのマットがあり、左上 = 50,50 サイズ = 100,50 の長方形の領域のみをぼかしたい。私は opencv.org の例とドキュメントを調べてきましたが、Mat の sub-rect に対してのみフィルタリングしたり、他の操作を実行したりする方法を判断できません。

問題のコードは以下のとおりです。surfは SDL_Surface で、rectは SDL_Rect (int x,y,w,h) です。サーフェスからの作成との線は、Mat src_mat他の場所でもうまく機能するので問題ありません。これはコンパイルされますが、次のエラーが発生します。

{ // Extra scoping used for the surface_lock.
    using namespace cv;
    surface_lock surf_lock(surf);

    //int rows, int cols, int type, void* data, size_t step=AUTO_STEP
    Mat src_mat = Mat(surf->h, surf->w, CV_8UC4, src->pixels, Mat::AUTO_STEP);
    Mat cropmat(src_mat, Rect(rect.y, rect.y + rect.h, rect.x, rect.x + rect.w));

    blur(crop_mat, crop_mat, Size((depth + 1), (depth + 1)), Point(-1,-1));
}

エラー:

OpenCV Error: Assertion failed (0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows) in Mat, file /build/opencv/src/opencv-2.4.6.1/modules/core/src/matrix.cpp, line 323
terminate called after throwing an instance of 'cv::Exception'
  what():  /build/opencv/src/opencv-2.4.6.1/modules/core/src/matrix.cpp:323: error: (-215) 0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows in function Mat
4

1 に答える 1