我是一名学生,我正在研究可扫描数独并解决它的应用程序。我正在拍照,而不是找到最大的轮廓。这是起作用的问题,当我想在空垫子上提取最大的计数器(它有白色背景)时,问题就开始了,应用程序没有显示应该带有图片的活动(在其他图片中有),但是它返回到我的mainactivity 。我正在使用本教程进行提取:https://bytefish.de/blog/extracting_contours_with_opencv/。
mat4=mat1; // mat 1 is current frame on camera
transpose(mat4, mat4);
flip(mat4, mat4, +1);
mat5=mat4;
Mat okraje = new Mat();
Mat hiearchy = new Mat();
Imgproc.cvtColor(mat5,mat5,Imgproc.COLOR_BGR2GRAY);
List<MatOfPoint> contourList = new ArrayList<MatOfPoint>();
Imgproc.Canny(mat5,okraje,80,100);
Imgproc.findContours(okraje,contourList,hiearchy,Imgproc.RETR_CCOMP, Imgproc.CHAIN_APPROX_SIMPLE); // TOPKA JEBNE PLNY STVOREC A KRATKO!!
for(int ab=0;ab < contourList.size(); ab++ ){
a = contourArea(contourList.get(ab),false);
if(a>largest_area){
b=ab;
largest_area = a;
largest_contour_index=ab;
bounding_rect=boundingRect(contourList.get(ab));
}
}
Mat len_sudkoku = new Mat();
len_sudkoku.create(mat5.rows(), mat5.cols(),CvType.CV_8UC3);
len_sudkoku.setTo(new Scalar(255,255,255));
Mat lskere = new Mat();
lskere.create(okraje.cols(), okraje.rows(), CvType.CV_8UC1);
Random r = new Random();
Imgproc.drawContours( lskere, contourList,largest_contour_index, new Scalar(r.nextInt(255), r.nextInt(255), r.nextInt(255)), -1);
mat5.copyTo(len_sudkoku,lskere); // pada to!!
Bitmap bm = Bitmap.createBitmap(len_sudkoku.cols(),len_sudkoku.rows(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(len_sudkoku,bm);
setContentView(R.layout.activity_fotka_ukaz);
ImageView IMW = findViewById(R.id.imageView);
IMW.setImageBitmap(bm);
我希望能像我在这里发布的教程中那样,一个人提取一个苹果并将其放在另一个背景上。我注意到的是,当我使用命令时,应用程序返回到主活动(应该显示图像)
mat5.copyTo(len_sudkoku, lskere)
答案 0 :(得分:0)
好的,我解决了。问题不在于(显然)在命令副本中,而在于不同的mat和位图的声明大小。问题在于声明中的第一个输入有时是行和列的,因此崩溃了。现在,我将大小添加到Mat层次结构和okraje中,然后将lskere.create(okraje.cols(),okraje.rows(),lskere.create(okraje.rows(),okraje.cols()...