2017-02-24 4 views
0

J'utilise camera2 API pour construire un projet de traitement d'image sous Android. J'utilise TextureView pour obtenir un écran d'aperçu, et ImageReader pour obtenir des images. Pour les besoins du traitement d'image, j'ai besoin d'obtenir des images d'une taille maximale dans ImageReader, et je n'ai aucune exigence sur la taille des images d'aperçu. Je me suis donc la taille des cadres respectivement avec les codes suivants:Quelle est la relation entre la taille de l'image de prévisualisation et la taille de l'image capturée dans Android API2 API?

 StreamConfigurationMap map = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); 
     imageDimension = map.getOutputSizes(SurfaceTexture.class)[0]; 
     texture.setDefaultBufferSize(imageDimension.getWidth(), imageDimension.getHeight()); 

     List<Size> outputSizes = Arrays.asList(map.getOutputSizes(sImageFormat)); 
     largest = Collections.max(outputSizes, new CompareSizesByArea()); 
     mImageReader = ImageReader.newInstance(largest.getWidth(), largest.getHeight(), sImageFormat, 1); 

En mai tester appareil Android Huawei P9: imageDimension est: 1280 * 720; Le plus grand est: 3968 * 2976.

J'ai trouvé que l'écran de prévisualisation fonctionne bien, cependant, l'image capturée dans le onImageAvailable est complètement noire, je suppose que rien n'est capturé.

J'ai essayé deux façons de comprendre ce qui se passe ici. 1) J'ai défini la taille de ImageReader sur imageDimension et trouvé que l'image capturée est OK. 2) J'ai mis la taille des cadres de prévisualisation au plus grand et trouvé que l'écran de prévisualisation est noir.

Par conséquent, je me demande si la taille de l'image capturée dans ImageReader devrait être inférieure à celle des images d'aperçu. C'est le cas, comment puis-je définir la résolution maximale du cadre de prévisualisation?

De toute façon, mon but est d'obtenir des images avec une résolution maximale ainsi qu'un écran de prévisualisation fluide. Toutes les suggestions sont les bienvenues. Merci.

Répondre

1

En théorie, la résolution de deux sorties séparées ne devrait faire aucune différence, tant que vous êtes dans les limites de la résolution pour les flux multiples listés dans les tableaux au the documentation for CameraDevice.createCaptureSession(). Si vous opérez à une résolution supérieure à ces garanties, les choses peuvent ne pas fonctionner comme prévu.

En général, je recommande de conserver la résolution d'aperçu < = 1080p (1920x1080); de nombreux périphériques ne peuvent pas produire un aperçu de 30 images par seconde à des résolutions supérieures à cette taille; certains peuvent même exiger 720p ou moins. En outre, le GPU d'un périphérique peut ne pas être en mesure de gérer la sortie de la caméra en pleine résolution, ce qui peut expliquer certaines sorties de prévisualisation en noir.

Il n'y a aucune raison pour que ImageReader soit plus petit que l'aperçu; Je suppose que vous avez peut-être une taille de prévisualisation trop élevée.

Donc, essayez une configuration de:

  • pleine résolution ImageReader
  • 1080p ou aperçu similaire