Este paquete contiene la implementación de módulos OpenCV, la versión utilizada es 4.3.0 tanto para plataformas Android como iOS.
-
Esta desarrollada para la integración la librería de visión artificial OpenCV en su versión 4.3.0
-
Es compatible con Android e iOS.
-
Se tuvo en cuenta la integración sencilla con paquetes populares de flutter como image_picker para procesar imágenes de la galería o la camara, puedes ver el ejemplo de implementación aquí, en este caso necesitas configurar tu proyecto con Nullsafety..
-
Los módulos de OpenCV empleados son los siguientes:
- 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
- Todos los procesamientos son a través del path de la imagen.
- Imágenes en flutter a travez de la carpeta asset configurada. Default
- Imágenes en la web.
- Imágenes de la galería o camara usando image_picker
- Parecida a Phyton para llamada a métodos y constantes de procesamiento de imagen por ejemplo
Cv2.ctvColor
Cv2.COLOR_BGR2GRAY
Agregue esto al archivo pubspec.yaml
de su paquete:
dependencies:
opencv_4: ^1.0.0
Puede instalar paquetes desde la línea de comandos:
$ flutter pub get
Ahora en su código Dart
, puede usar:
import 'package:opencv_4/opencv_4.dart';
- Android: requiere la mínima versión 21 en el proyecto
android (folder) -> app (folder) -> build.gradle
defaultConfig {
...
minSdkVersion 21
...
}
- Si se va a trabajar con el path de assets flutter no requiere permisos ni en Android e iOS.
- Si se desea trabajar con imágenes de la web no requiere configuración.
- Si se va a utilizar el paquete image_picker para trabajar con imágenes de la camara y galería, seguir su configuración de permisos para Android e iOS.
Nullsafety
si vas a utilizar el ejemplo debes configurar el archivopubspect.yaml
environment:
sdk: ">=2.12.0 <3.0.0"
Cv2
: Clase que contiene la implementación de módulos y constantes de OpenCV
CVPathFrom
: Permite configurar la ruta para procesar las imágenes.
URL
(static constant) configurar opencv para imágenes webGALLERY_CAMERA
(static constant) configurar opencv para las imágenes obtenidas de la galeria o camaraASSETS
(static constant) configurar opencv para imágenes de flutter enpubspect.yaml
->assets/test.jpg
from my behance acount
Algunos ejemplos
Debe ser llamado dentro de una función async
Uint8List _byte = await Cv2.bilateralFilter(
pathFrom: CVPathFrom.ASSETS,
pathString: 'assets/Test.JPG',
diameter: 20,
sigmaColor: 75,
sigmaSpace: 75,
borderType: Cv2.BORDER_DEFAULT,
);
setState(() {
_byte;
});
Mostrar resultado en un widget Image
Image.memory(
_byte,
width: 300,
height: 300,
fit: BoxFit.fill,
)
Nota: Si quieres procesar una imagen de la web debes configurar pathFrom: CVPathFrom.URL
remplazar en pathString
por una URL por ejemplo. 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;
});
Puedes escribir solicitudes de módulos y errores en issue tracker.
Para darte una mejor solución...
BTC
: bc1qhy5uer94d4xvp2wgtfg5l6s6jk8gwj6d0ufqvhBNB
: bnb17z7dqeeyrkhq2l9mx6p3hg6ewvshrpkqqzcpr9ETH
: 0xb76D1F1f97eBf5B2096D5449cB3DDD2096CCB4b3