2017-06-03 65 views
1

OpenCv4Android环境中,当我创建Mat图像并使用Core.line()在图像上绘图时,它始终显示一个白色,而不是我指定的颜色。OpenCv Core.line在预计颜色时绘制白色

white square instead of green square

我看到a question related to gray scale,但是我有图像没有被转换为灰色。

public class DrawingTest extends AppCompatActivity { 
    public static final Scalar GREEN = new Scalar(0,255,0); 
    private RelativeLayout mLayout; 
    private ImageView imageView; 

    static { 
     System.loadLibrary("opencv_java"); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_drawing_test); 

     mLayout = (RelativeLayout) findViewById(R.id.activity_drawing_test); 
     mLayout.setDrawingCacheEnabled(true); 

     imageView = (ImageView) this.findViewById(imageView_dt); 

     //test.jpg is in the drawable-nodpi folder, is an normal color jpg image. 
     int drawableResourceId = getResources().getIdentifier("test", "drawable", getPackageName()); 
     Bitmap bitmap = BitmapFactory.decodeResource(getResources(), drawableResourceId); 
     //Mat matImage = new Mat(); // Also white 
     Mat matImage = new Mat(bitmap.getHeight(), bitmap.getWidth(), CV_8UC4); 
     Utils.bitmapToMat(bitmap, matImage); 


     // Attempt to draw a GREEN box, but it comes out white 
     Core.line(matImage, new Point(new double[]{100,100}), new Point(new double[]{100, 200}), GREEN,4); 
     Core.line(matImage, new Point(new double[]{100,200}), new Point(new double[]{200, 200}), GREEN,4); 
     Core.line(matImage, new Point(new double[]{200,200}), new Point(new double[]{200, 100}), GREEN,4); 
     Core.line(matImage, new Point(new double[]{200,100}), new Point(new double[]{100, 100}), GREEN,4); 

     Bitmap bitmapToDisplay = Bitmap.createBitmap(matImage.cols(), matImage.rows(), Bitmap.Config.ARGB_8888); 
     Utils.matToBitmap(matImage, bitmapToDisplay); 
     imageView.setImageBitmap(bitmapToDisplay); 
    } 
} 

回答

2

的问题是你已经初始化

public static final Scalar GREEN = new Scalar(0,255,0); 

按照这种说法

Mat matImage = new Mat(bitmap.getHeight(), bitmap.getWidth(), CV_8UC4);` 

要创建一个4通道垫的颜色,但初始化GREEN标量与3只有组件,因此第四个组件,它定义了你的线路的第四个通道的颜色,在你的情况下,默认值为0

所以,你感觉白色是现实中透明的。您可以通过创建matImageCV_8UC3或将您的GREEN标量更改为public static final Scalar GREEN = new Scalar(0,255,0, 255);