輪郭検出アルゴリズムの一部の OpenCV Mat をグレースケールに変換しようとしています。変換後の画像がなぜか真っ黒。私のコード (b は Android ビットマップ):
Mat tmp = new Mat (b.getWidth(), b.getHeight(), CvType.CV_8UC1);
Utils.bitmapToMat(b, tmp);
Imgproc.cvtColor(tmp, tmp, Imgproc.COLOR_BGR2GRAY);
//there could be some processing
Imgproc.cvtColor(tmp, tmp, Imgproc.COLOR_GRAY2BGRA, 4);
Utils.matToBitmap(tmp, b);
そして今、このビットマップを描いていますが、すべて黒です。このビットマップに(コメントの代わりに)輪郭検出を適用したところ、一致がなかったため、変換に問題があると思われます。変換を削除した後 (単純に bitmapToMat と matToBitmap を呼び出します)、ビットマップがすべて黒ではないため、Mat への変換も機能します。ビットマップは ARGB_8888 で、エラーはありません。出力ビットマップだけがすべて黒です。
編集: ocv imwrite でビットマップを保存しようとしたことを確認するために - まだすべて黒なので、問題は cvtColor で 100% です...