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

Java 在opencv中写入图像时出现空指针异常,java,opencv,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); 错误是 未为类型Fa

我尝试在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定义srcImgrect

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);
//srcImgrect.copyTodstImg处出现空指针异常

帮助解决此错误


谢谢

1 imgRct在C++中是有效的,但是在爪哇中你需要:

img.submat(Rect)
1进行此操作之前,请查看所需的Rect是否完全适合您的img, 将其剪辑到img边界,否则是的,会发生这种情况,例如,FaceDetection最终将返回out-bounds 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);

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

请检查您的图像名称是否区分大小写,包括扩展名和文件是否放置在正确的路径。我检查了所有内容是否正确,但仍然出现错误。请考虑第一个错误。先帮我解决这个问题。。。谢谢你的回复@aman试着像这样通过绝对路径。File File=new Filechina.jpg;Mat m=Highgui.imreadfile.getAbsolutePath;dstImg中出现空指针异常,不在中国。jpg感谢@AmanI尝试您的指导原则。我的rect值为x:=49y:=64width:=186height=201运行时在Mat dstImg=srcImg.substrect.clone中发生错误;错误在org.opencv.core.Mat.n_subtrantive方法org.opencv.core.Mat.submatmatmat.java:2325谢谢@berakoh,周六的马虎,我的错。我想,你必须检查一下,如果矩形真的适合你的图像,那现在是另一个错误了,对吗?谢谢。rect值不适合我的图像。现在我纠正它。非常感谢@berak