1
這個問題是類似的,但從來沒有被回答:OpenCV filtering part of an imageC++ OpenCV如何將過濾器應用到Mat的子節點?
我使用opencv2和c + +。我有一個墊,比如說300x200,我想模糊只有矩形區域左上角= 50,50大小= 100,50。我一直在瀏覽opencv.org上的示例和文檔,但我無法確定如何從Mat中只對一個子矩陣進行過濾或執行其他操作。
有問題的代碼在下面,其中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
我剛剛得到了一個漂亮的段錯誤,所以我發佈代碼,因爲我顯然誤解了你的建議。 – justinzane
回答你的編輯:你的Rect看起來非常破碎:Rect(rect.y,rect.y + rect.h,rect.x,rect.x + rect.w); //在這裏嘗試簡單的'rect' – berak
cv :: Rect是(x,y,w,h),所以沒有y + h,x + w,並且你得到y和x反向 – berak