在opencv中写入图像时出现空指针异常

Null pointer Exception when write a image in opencv

我尝试在 opencv 2.4.10 中裁剪图像 java。

我的代码

我的 java class 名字是 FaceDetector

Mat srcImg= Highgui.imread("china.jpg"),dstImg=null;
Rect rect = new Rect( x, y, width, height ); 
        srcImg(rect).copyTo(dstImg); 
        Highgui.imwrite("screen.jpg", dstImg);

错误是

srcImg(rect) 未定义类型 FaceDetector

空指针异常在//srcImg(rect).copyTo(dstImg);

帮助解决这个错误

谢谢

1) img(Rect) 在c++中有效,但在java中你需要:

img.submat(Rect)

1a) 在这样做之前,请查看所需的 Rect 是否完全适合您的 img, 将其剪辑到 img 边界 else(是的,这发生了,例如 FaceDetection 最终将 return 越界 Rects !):

Rect r;
int ox = (r.x + r.width) - img.cols() - 1;
if ( ox > 0 ) r.width -= ox;

int oy = (r.y + r.height) - img.rows() - 1;
if ( oy > 0 ) r.width -= ox;

2) copyTo() 需要一个有效的目标(足够大的图像)。因为无论如何您都想将它分配给新图像,请使用

Mat dstImg = srcImg.submat(Rect).clone();

3) 每当您加载资源时,检查结果!

Mat srcImg= Highgui.imread("china.jpg");
if ( srcImg.empty() )
    // baah

找了半天终于解决了

 Mat crop=new Mat();

      crop=srcImg.submat(x,width,y,height);
      Highgui.imwrite("screen3.jpg", crop);

现在我检测到的脸被清晰地裁剪了。