Esta biblioteca contém a implementação de módulos OpenCV, a versão utilizada é 4.3.0 para plataformas Android e iOS.
-
Foi desenvolvido para a integração da biblioteca de visão artificial OpenCV em sua versão 4.3.50
-
É compatível com Android e iOS.
-
A integração simples com bibliotecas de flutter populares como image_picker foi levada em consideração para processar imagens da galeria ou câmera, você pode ver o exemplo de implementação aqui, neste caso você precisa configurar seu projeto com Nullsafety.
-
Os módulos OpenCV usados são os seguintes:
- Image Processing
- Image Filtering
- bilateralFilter
- blur
- boxFilter
- dilate
- erode
- filter2D
- gaussianBlur
- laplacian
- medianBlur
- morphologyEx
- pyrDown
- pyrMeanShiftFiltering
- pyrUp
- scharr
- sobel
- sqrBoxFilter
- Miscellaneous Image Transformations
- adaptiveThreshold
- distanceTransform
- threshold
- Color Space Conversions
- cvtColor
- ColorMaps in OpenCV
- applyColorMap
- Image Filtering
- Image Processing
- Todo o processamento é feito através do path da imagem
- Imagens no flutter por meio do diretório de assets configurado. Default
- Imagens na web.
- Imagens da galeria ou câmera usando image_picker
- Semelhante ao Python para chamar métodos e constantes de processamento de imagem, por exemplo
Cv2.ctvColor
Cv2.COLOR_BGR2GRAY
Adicione isso ao arquivo pubspec.yaml
do seu projeto:
dependencies:
opencv_4: ^1.0.0
Você pode instalar bibliotecas a partir da linha de comando:
$ flutter pub get
Agora em seu código Dart
, você pode usar:
import 'package:opencv_4/opencv_4.dart';
- Android: requer a versão mínima 21 no projeto
android (folder) -> app (folder) -> build.gradle
defaultConfig {
...
minSdkVersion 21
...
}
- Se você vai trabalhar com o path de assets flutter, não requer permissões no Android e iOS.
- Se você deseja trabalhar com imagens da web, nenhuma configuração é necessária.
- Se a biblioteca image_picker for usada para trabalhar com imagens da câmera e da galeria, siga as configurações de permissão para Android e iOS.
Nullsafety
se você vai usar o exemplo você deve configurarpubspect.yaml
environment:
sdk: ">=2.12.0 <3.0.0"
Cv2
: Classe que contém a implementação de módulos e constantes OpenCV
CVPathFrom
: Permite que você configure o path para processar as imagens.
URL
(static constant) configurar opencv para imagens da webGALLERY_CAMERA
(static constant) configurar o opencv para as imagens obtidas na galeria ou câmeraASSETS
(static constant) configurar opencv para imagens flutter empubspect.yaml
->assets/test.jpg
from my behance acount
Alguns exemplos
Deve ser chamado em uma função async
Uint8List _byte = await Cv2.bilateralFilter(
pathFrom: CVPathFrom.ASSETS,
pathString: 'assets/Test.JPG?raw=true',
diameter: 20,
sigmaColor: 75,
sigmaSpace: 75,
borderType: Cv2.BORDER_DEFAULT,
);
setState(() {
_byte;
});
Mostrar resultado no widget Image
Image.memory(
_byte,
width: 300,
height: 300,
fit: BoxFit.fill,
)
Nota: Se você deseja processar uma imagem da web, você deve configurar pathFrom: CVPathFrom.URL
substituir em pathString
por um url. pathString: 'https://mir-s3-cdn-cf.behance.net/project_modules/fs/313f8e114930481.6044f05fcd866.jpeg'
Uint8List _byte = await Cv2.dilate(
pathFrom: CVPathFrom.ASSETS,
pathString: 'assets/Test.JPG',
kernelSize: [3, 3],
);
setState(() {
_byte;
});
Uint8List _byte = await Cv2.filter2D(
pathFrom: CVPathFrom.URL,
pathString:
'https://mir-s3-cdn-cf.behance.net/project_modules/max_1200/634dba114930481.6044f05fcb2dd.jpeg',
outputDepth: -1,
kernelSize: [2, 2],
);
setState(() {
_byte;
});
Uint8List _byte = await Cv2.medianBlur(
pathFrom: CVPathFrom.URL,
pathString:
'https://mir-s3-cdn-cf.behance.net/project_modules/max_1200/16fe9f114930481.6044f05fca574.jpeg',
kernelSize: 19,
);
setState(() {
_byte;
});
Uint8List _byte = await Cv2.morphologyEx(
pathFrom: CVPathFrom.URL,
pathString:
'https://mir-s3-cdn-cf.behance.net/project_modules/fs/c7da51114930481.6044f05fcc76a.jpeg',
operation: Cv2.MORPH_TOPHAT,
kernelSize: [5, 5],
);
setState(() {
_byte;
});
Uint8List _byte = await Cv2.pyrMeanShiftFiltering(
pathFrom: CVPathFrom.ASSETS,
pathString: 'assets/Test.JPG',
spatialWindowRadius: 20,
colorWindowRadius: 20,
);
setState(() {
_byte;
});
Uint8List _byte = await Cv2.scharr(
pathFrom: CVPathFrom.ASSETS,
pathString: 'assets/Test.JPG',
depth: Cv2.CV_SCHARR,
dx: 0,
dy: 1,
);
setState(() {
_byte;
});
Uint8List _byte = await Cv2.cvtColor(
pathFrom: CVPathFrom.ASSETS,
pathString: 'assets/Test.JPG',
outputType: Cv2.COLOR_BGR2GRAY,
);
setState(() {
_byte;
});
Uint8List _byte = await Cv2.applyColorMap(
pathFrom: CVPathFrom.URL,
pathString:
'https://mir-s3-cdn-cf.behance.net/project_modules/max_1200/16fe9f114930481.6044f05fca574.jpeg',
colorMap: Cv2.COLORMAP_JET,
);
setState(() {
_byte;
});
Uint8List _byte = await Cv2.threshold(
pathFrom: CVPathFrom.ASSETS,
pathString: 'assets/Test.JPG',
thresholdValue: 150,
maxThresholdValue: 200,
thresholdType: Cv2.THRESH_BINARY,
);
setState(() {
_byte;
});
Uint8List _byte = await Cv2.adaptiveThreshold(
pathFrom: CVPathFrom.ASSETS,
pathString: 'assets/Test.JPG',
maxValue: 125,
adaptiveMethod: Cv2.ADAPTIVE_THRESH_MEAN_C,
thresholdType: Cv2.THRESH_BINARY,
blockSize: 11,
constantValue: 12,
);
setState(() {
_byte;
});
Você pode escrever solicitações de módulo e erros em issue tracker.
Para te dar uma solução melhor...
BTC
: bc1qhy5uer94d4xvp2wgtfg5l6s6jk8gwj6d0ufqvhBNB
: bnb17z7dqeeyrkhq2l9mx6p3hg6ewvshrpkqqzcpr9ETH
: 0xb76D1F1f97eBf5B2096D5449cB3DDD2096CCB4b3