###前提・実現したいこと
javaでopencvを用いて2値画像において四方を白ピクセルに囲まれた黒ピクセルを白く塗りつぶしたいのですが白ピクセルに囲まれているところを判別する箇所でぬるぽが発生してしまいます
mainで2値画像内の黒ピクセルを発見しsiroメソッドに渡して四方の確認をしていますがsiro内の三回目のforでdata[0]がnullとなってしまいます
###発生している問題・エラーメッセージ
Exception in thread "main" java.lang.NullPointerException at opencv.BW.siro(BW.java:154) at opencv.BW.main(BW.java:63)
###該当のソースコード
for(x = 0; x < sizeim.width; x++){ for(y = halfheight; y < sizeim.height; y++){ kurodata = im2.get(x, y); Imgcodecs.imwrite("kuroino6.png",im2); System.out.println(kurodata[0]); if(kurodata[0] == 0){ if(siro(im2,x,y) == true){ im2.put(x, y, 255); } } } } //2値画像の白で囲まれた黒を白に変えるメソッド private static boolean siro(Mat im2,int x,int y){ Size sizeim2 = im2.size(); double im2height = sizeim2.height; double im2width = sizeim2.width; //高さの半分を求めている int halfheight; if(im2height%2 == 1){ im2height--; halfheight = (int)im2height/2; im2height++; }else{ halfheight = (int)im2height/2; } int i,j,mitasu; mitasu = 0; double[] data = new double[3]; //同じ行に白ピクセルがないか探す for(i = halfheight;i < y;i++){ data = im2.get(x, i); if(data[0] == 255){ mitasu++; break; } } for(i = y;i < im2height;i++){ data = im2.get(x, i); if(data[0] == 255){ mitasu++; break; } } //同じ列に白ピクセルがないか探す for(j = 0;j < x;j++){ data = im2.get(j, y); //ここのdata[0]がnullになる if(data[0] == 255){ mitasu++; break; } } for(j = x;j < im2width;j++){ data = im2.get(j, y); if(data[0] == 255){ mitasu++; break; } } if(mitasu == 4){ return true; }else{ return false; } }
###補足情報(言語/FW/ツール等のバージョンなど)
opencv3.0
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。