Я разработал приложение для преобразования изображения из rgb в оттенки серого, используя openCV 3.1.0 sdk. Я следую примеру от https://www.youtube.com/watch?v=GhQ6CHh4Enk.
В этом примере изображение выбирается прямо из галереи, но мое приложение извлекает изображение из firebase
и onClickListener
. recyclerView
намеревается выполнить новое действие и анализирует выбранное изображение и его строку, поэтому я не знать, как назначить переменную растровое изображение для моего imageview
Это пример из видео, которое я смотрю
{
ImageView imgviewer;
Uri imageuri;
Bitmap grayBitmap, imageBitmap;
//TextView textView;
Button btn_calculate;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
OpenCVLoader.initDebug();
imgviewer = findViewById(R.id.imgViewer);
btn_calculate = findViewById(R.id.btn_calculate);
btn_calculate.setVisibility(View.INVISIBLE);
//textView = findViewById(R.id.textView);
//textView.setVisibility(View.INVISIBLE);
}
public void openGallery(View v)
{
Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(galleryIntent,1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1 && resultCode == RESULT_OK && data != null)
{
imageuri = data.getData();
try
{
imageBitmap = MediaStore.Images.Media.getBitmap(getContentResolver(),imageuri);
}
catch (IOException e)
{
e.printStackTrace();
}
imgviewer.setImageBitmap(imageBitmap);
}
}
public void ConvertGrayscale(View v)
{
Mat Rgba = new Mat();
Mat grayMat = new Mat();
BitmapFactory.Options o = new BitmapFactory.Options();
o.inDither = false;
o.inSampleSize = 4;
int width = imageBitmap.getWidth();
int height = imageBitmap.getHeight();
grayBitmap = Bitmap.createBitmap(width,height,Bitmap.Config.RGB_565);
Utils.bitmapToMat(imageBitmap,Rgba);
Imgproc.cvtColor(Rgba,grayMat,Imgproc.COLOR_RGB2GRAY);
Utils.matToBitmap(grayMat, grayBitmap);
imgviewer.setImageBitmap(grayBitmap);
}
Вот моя модификация
setContentView(R.layout.activity_sample_list_detail);
OpenCVLoader.initDebug();
Intent intent = getIntent();
String sampleID = intent.getStringExtra(EXTRA_sampleID);
String sampleImageUrl = intent.getStringExtra(EXTRA_sampleImageUrl);
imageView = findViewById(R.id.imgViewDetail);
TextView textViewID = findViewById(R.id.idDetail);
textViewID.setText(sampleID);
Picasso.get()
.load(sampleImageUrl)
.fit()
.centerInside()
.into(imageView);
}
public void ConvertGrayscale(View v)
{
Mat Rgba = new Mat();
Mat grayMat = new Mat();
BitmapFactory.Options o = new BitmapFactory.Options();
o.inDither = false;
o.inSampleSize = 4;
int width = imageBitmap.getWidth();
int height = imageBitmap.getHeight();
grayBitmap = Bitmap.createBitmap(width,height,Bitmap.Config.RGB_565);
Utils.bitmapToMat(imageBitmap,Rgba);
Imgproc.cvtColor(Rgba,grayMat,Imgproc.COLOR_RGB2GRAY);
Utils.matToBitmap(grayMat, grayBitmap);
imageView.setImageBitmap(grayBitmap);
}```
*The image should be convert in grayscale*
[This is my recyclerView][1]
[recyclerView intent new activity][2]
[1]: https://i.stack.imgur.com/XK3VS.png
[2]: https://i.stack.imgur.com/E0PDf.png