2011-12-10 24 views
6

Tôi đang sử dụng thư viện opencv mới hơn của willowgarage trong nhật thực. Và tôi muốn chuyển đổi một biến mat thành màu xám, tôi đã thử tất cả mọi thứ tôi tìm thấy trên mạng nhưng họ đã không làm việc cho tôi.android-opencv chuyển đổi mat sang màu xám với việc sử dụng matToBitmap/bitmapToMat

Đây là mã của tôi

package com.deneme.deneme; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.ImageView; 
import org.opencv.android.Utils; 
import org.opencv.core.Mat; 
import org.opencv.imgproc.Imgproc; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
public class main extends Activity { 
/** Called when the activity is first created. */ 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    ImageView img=(ImageView) findViewById(R.id.pic); 

    Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.p26); 

    Mat imgToProcess=Utils.bitmapToMat(bmp); 

    //****** 
    //right here I need to convert this imgToProcess to grayscale for future opencv processes 
    //****** 

    Bitmap bmpOut = Bitmap.createBitmap(imgToProcess.cols(), imgToProcess.rows(), Bitmap.Config.ARGB_8888); 

    Utils.matToBitmap(imgToProcess, bmpOut); 
    img.setImageBitmap(bmpOut); 
} 

}

Trả lời

11

Thêm đoạn mã sau vào khối mã của bạn:

Imgproc.cvtColor(imgToProcess, imgToProcess, Imgproc.COLOR_BGR2GRAY); 
Imgproc.cvtColor(imgToProcess, imgToProcess, Imgproc.COLOR_GRAY2RGBA, 4); 

Hoặc bạn có thể truy cập pixel của mình:

for(int i=0;i<imgToProcess.height();i++){ 
    for(int j=0;j<imgToProcess.width();j++){ 
     double y = 0.3 * imgToProcess.get(i, j)[0] + 0.59 * imgToProcess.get(i, j)[1] + 0.11 * imgToProcess.get(i, j)[2]; 
     imgToProcess.put(i, j, new double[]{y, y, y, 255}); 
    } 
} 
+0

Chỉ cần nhớ rằng opencv doesnt sử dụng những trọng số này. Dưới đây là những gì họ sử dụng: http://stackoverflow.com/questions/19181323/what-grayscale-conversion-algorithm-does-opencv-cvtcolor-use – Dinidiniz

Các vấn đề liên quan