java - 在 imageView 中调用图像破坏生成的图像

标签 java android eclipse opencv image-processing

我正在使用 Android NDK 和 OpenCV。 我有两个输入图像作为输入和一个输出图像。 第一个输入图像只是普通图像,第二个是小插图。

我从 Java 端收到某种逻辑错误。

下面是我的java代码:

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

         imageview_1=(ImageView) findViewById(R.id.imageView1);
         imageview_2=(ImageView) findViewById(R.id.imageView2);

        InputStream is , Vign;
        is = this.getResources().openRawResource(R.drawable.me);
        final Bitmap bmInImg = BitmapFactory.decodeStream(is);
        Vign = this.getResources().openRawResource(R.drawable.p);
        final Bitmap bmInImg2 = BitmapFactory.decodeStream(Vign);

        mPhotoIntArray = new int[bmInImg.getWidth() * bmInImg.getHeight()];
        nPhotoIntArray = new int[bmInImg.getWidth() * bmInImg.getHeight()];
        vPhotoIntArray = new int[bmInImg2.getWidth() * bmInImg2.getHeight()];
        imageview_1.setImageBitmap(bmInImg);
        // Copy pixel data from the Bitmap into the 'intArray' array
        bmInImg.getPixels(mPhotoIntArray, 0, bmInImg.getWidth(), 0, 0, bmInImg.getWidth(), bmInImg.getHeight());
        bmInImg2.getPixels(vPhotoIntArray, 0, bmInImg2.getWidth(), 0, 0, bmInImg2.getWidth(), bmInImg2.getHeight());

        mCannyOutArray = new int[bmInImg2.getWidth() * bmInImg2.getHeight()];
        final Bitmap bmOutImg = Bitmap.createBitmap(bmInImg2.getWidth(), bmInImg2.getHeight(), Config.ARGB_8888);  
        bmOutImg.setPixels(mCannyOutArray, 0, bmInImg2.getWidth(), 0, 0, bmInImg2.getWidth(), bmInImg2.getHeight());

        Button button= (Button) findViewById(R.id.NextButton);
        button.setOnClickListener(new OnClickListener() {

            @Override
        public void onClick(View v)  {  

                if (count ==0)
                {
                    Vig(bmInImg.getHeight(),bmInImg.getWidth(),bmInImg2.getHeight(),bmInImg2.getWidth(), mPhotoIntArray,vPhotoIntArray, mCannyOutArray); 

                    bmOutImg.setPixels(mCannyOutArray, 0, bmInImg2.getWidth(), 0, 0, bmInImg2.getWidth(), bmInImg2.getHeight());    
                    imageview_2.setImageBitmap(bmOutImg);        
                }

                count++;        
            }
            }); 

        String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
        String outFileName = extStorageDirectory + "/me.png";
        OutputBitmapToFile(bmOutImg, outFileName);      
    }

上面的代码给我的小插图很好作为输出但是第一张图像在所有图像上显示衬里并且当我添加两个图像时小插图看起来很好但是小插图内的图像(image1)充满了线条,如果我改变代码bmOutImg.setPixels 从外部和内部条件 if

Vig(bmInImg.getHeight(),bmInImg.getWidth(),bmInImg2.getHeight(),bmInImg2.getWidth(), mPhotoIntArray,vPhotoIntArray, mCannyOutArray); 

bmOutImg.setPixels(mCannyOutArray, 0, bmInImg.getWidth(), 0, 0, bmInImg.getWidth(), bmInImg.getHeight());   
                        imageview_2.setImageBitmap(bmOutImg);

然后它在小插图图像上显示衬里。我的 mCannyOutArray 应该是什么,以便在我添加 vig+image1 时,我的两个图像都能为我的输出提供令人满意的结果

维格是:

enter image description here

img1 是:

enter image description here

输出:

enter image description here

主.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000000"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:contentDescription="@null" />

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="235dp"
        android:layout_height="208dp"
        android:layout_weight="0.10"
        android:contentDescription="@null" />

</LinearLayout>

最佳答案

首先,您需要确定问题出在哪里:

  • 它与您实现的晕影过滤器有关吗?
  • 还是图像在屏幕上的显示方式?

为帮助您解决此问题,请确保 vigimg1 在进行任何处理之前具有相同的尺寸。将这些图像保存到磁盘并检查它们的宽度/高度值。

然后执行您的过滤器,并在输出图像显示在屏幕上之前将其保存到硬盘。如果保存的图像看起来没问题,那么您肯定知道问题出在图像的显示方式上。

不久前我实现了一个 vignette filter using C++ and OpenCV ,您可以查看源代码并将其与您正在做的事情进行比较。这是一个例子:

输入:

输出:

关于java - 在 imageView 中调用图像破坏生成的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25694602/

相关文章:

android - flutter :ListWheelScrollView放大镜不起作用

android - 使用 ActionBarActivity 而不是 Activity 时,Backstack 不起作用

java - Hibernate session 未创建

java - Wicket 口和复合授权策略

java - 计算 SpringEL 表达式时出现异常 - 由于集合而出错?

java - 两幅图像之间的碰撞检测

eclipse - 我的第一个 JSF 程序出错。 Tomcat 和 Eclipse

java - 如何禁用或突出显示 JCalendar 中的日期

java - 如何使用 setFocusable(false) 突出显示 JTextPane 中的文本?

java - 我可以通过 Eclipse 在 Glassfish 中部署 .EAR 吗?