我正在使用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时,两个图像都可以给出满意的输出结果。
Vig是:
![enter image description here](https://istack.dev59.com/WgzPT.webp)
![enter image description here](https://istack.dev59.com/isQBn.webp)
![enter image description here](https://istack.dev59.com/iOpal.webp)
<?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>
vig
和img1
具有相同的尺寸时,问题是否仍然存在? - karlphillipimg1
的尺寸作为输出,那么输出中将不会显示“vig”。 - AHFvig
和img1
被创建(或缩放)为完全相同的尺寸。当然,output
应该具有与输入图像相同的尺寸。 - karlphillip