android-opencv 使用 matToBitmap/bitmapToMat 将 mat 转换为灰度

发布于 2024-12-20 15:43:14 字数 1139 浏览 2 评论 0原文

我在 eclipse 中使用更新的 willowgarage opencv 库。我想将 mat 变量转换为灰度,我已经尝试了在网上找到的所有内容,但它们对我不起作用。

这是我的代码

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);
}

}

I am using newer opencv library of willowgarage in eclipse. And I want to convert a mat variable into grayscale, I've tried everything I found on the net but they didnt work for me.

Here is my code

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);
}

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

街道布景 2024-12-27 15:43:14

在代码块中添加以下代码:

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

或者您可以自己访问像素:

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});
    }
}

Add the following code in your code block:

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

Or you can access pixels by yourself:

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});
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文