我尝试在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)的空指针异常;
帮助解决此错误
由于
答案 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);
现在我检测到的脸部被清晰地裁剪了。