Como una especie de "proyecto de vacaciones" estoy jugando con OpenCV y quiero detectar y medir cosas.OpenCV C++/Obj-C: Detección adecuada de objetos
flujo de trabajo actual (etapa temprana - detección):
- Convertir a escala de grises (cv :: cvtColor)
- Aplicar umbral adaptativo (cv :: adaptiveThreshold)
- Aplicar detección de bordes de Canny (cv: : Canny)
- contornos Encontrar (cv :: findContours)
Mi resultado es un poco cutre y no estoy seguro de cuál es el Rig t dirección para ir. Ya tengo cvBlob trabajando en mi configuración actual (OSX 10.7.2, Xcode 4.2.1) ¿es una mejor manera de hacerlo? Si es así, ¿cómo puedo implementarlo de la manera correcta?
¿O necesito primero la resta de fondo? He intentado eso, pero no era capaz de encontrar contornos después
Aquí está mi imagen:
Y ese es mi salida, cuando dibujo mis contornos de nuevo en la primera imagen:
ACTUALIZACIÓN
lo tengo trabajo en mi programm y mi salida se ve un poco diferente ...
- (IBAction)processImage:(id)sender
{
cv::Mat forground = [[_inputView image] CVMat];
cv::Mat result = [self isolateBackground:forground];
[_outputView setImage:[NSImage imageWithCVMat:result]];
}
- (cv::Mat)isolateBackground:(cv::Mat &)_image
{
int rh = 255, rl = 100, gh = 255, gl = 0, bh = 70, bl = 0;
cv::cvtColor(_image, _image, CV_RGB2HSV_FULL);
cv::Mat element = getStructuringElement(cv::MORPH_RECT, cv::Size(5, 5));
cv::Mat bgIsolation;
cv::inRange(_image, cv::Scalar(bl, gl, rl), cv::Scalar(bh, gh, rh), bgIsolation);
bitwise_not(bgIsolation, bgIsolation);
erode(bgIsolation, bgIsolation, cv::Mat());
dilate(bgIsolation, bgIsolation, element);
return bgIsolation;
}
¡Muchas gracias! ¿Puedes echar un vistazo a mi código? – dom
@moosgummi La razón por la que obtiene un resultado diferente es porque se está transformando en el espacio de color HSV. Mis umbrales eran para el espacio RGB. Puede usar HSV, pero necesitará encontrar los rangos apropiados para ese espacio. Puede agregar esa conversión de color a mi aplicación de muestra y probarla. Imagino que solo tendrá que preocuparse por los canales de Hue y Saturación ya que el canal de Valor no contiene ninguna información de color (es decir, el rango de Valor no se tocará [0, 255]). ¡Espero que ayude! – mevatron
Ah ok, ¿entonces debería funcionar mejor en RGB?bl, gl y rl son valores azules, verdes y rojos. ¿Estoy en lo cierto? – dom