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

时间:2015-01-31 15:11:15

标签: java opencv

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

我的代码

我的java类名是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);

错误是

对于FaceDetector类型

,未定义

srcImg(rect)

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

帮助解决此错误

由于

2 个答案:

答案 0 :(得分:0)

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

img.submat(Rect)

1a)在这样做之前,看看,如果所需的Rect完全适合你的img,     将它剪辑到img bounds else(是的,发生这种情况,例如FaceDetection最终将返回越界的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

答案 1 :(得分:0)

很长一段时间后我得到了解决方案。

 Mat crop=new Mat();

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

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

相关问题