MATLAB: imshow no se muestra.
Publicado por Kevin Martinez G. (2 intervenciones) el 08/09/2018 04:50:31
Hola compañeros espero se encuentren muy bien.
El motivo de esta consulta es saber si alguno de ustedes tiene idea de porque se está presentando la siguiente situación con un Script que tengo para ejecución en MATLAB: Es un script para realizar un procesamiento de imagenes en el cual debo delimitar un objeto de color rojo. La cuestión es que cada frame capturado por la camara se procesa y se muestra inmediatamente, generando la sensación de movimiento (como si fuese un video). Especificamente en la línea 69 del código que agrego más abajo, es donde se muestra la imagen consecutivamente en el ciclo while infinito. El problema que he tenido es que, aunque suene extraño, antes si me mostraba las imagenes consecutivamente dando la sensación de video, pero justo ahora (luego de realizar algunas modificaciones al código) definitivamente no me muestra las imagenes, apenas ejecuto el script, no se abre ninguna ventana de imagen.
La siguiente es una advertencia que me aparece al ejecutar el codigo:
Warning: Image is too big to fit on screen; displaying at 67%
> In images.internal.initSize (line 71)
In imshow (line 305)
Cabe aclarar que reemplazando la línea 69 por : imshow(imresize(captura, 0.67)) ajustando el tamaño de la imagen, esta sigue sin mostrarse.
Agradezco si alguno sabe a que puede deberse la situación. Muchas gracias.
El motivo de esta consulta es saber si alguno de ustedes tiene idea de porque se está presentando la siguiente situación con un Script que tengo para ejecución en MATLAB: Es un script para realizar un procesamiento de imagenes en el cual debo delimitar un objeto de color rojo. La cuestión es que cada frame capturado por la camara se procesa y se muestra inmediatamente, generando la sensación de movimiento (como si fuese un video). Especificamente en la línea 69 del código que agrego más abajo, es donde se muestra la imagen consecutivamente en el ciclo while infinito. El problema que he tenido es que, aunque suene extraño, antes si me mostraba las imagenes consecutivamente dando la sensación de video, pero justo ahora (luego de realizar algunas modificaciones al código) definitivamente no me muestra las imagenes, apenas ejecuto el script, no se abre ninguna ventana de imagen.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
clear all, close all, clc
% VARIABLES
% DECLARACION
global alto; % Valor de alto (cantidad de pixeles) de los rectangulos
global ancho; % Valor de ancho (cantidad de pixeles) de los rectangulos
global contador; % Variable para definir la duracion de los rectangulos en sus posiciones
global totalFiguras;
global coloresFiguras;
global posicionesAleatorias;
global se; % Elemento estructurante para operaciones morfologicas
global cform; % Variable para almacenar el modelo de color CMYK
% DEFINICION
% Se divide el area de video en una cuadricula de 10x10
alto = 60; % 600/10
ancho = 80; % 800/10
contador = 0;
totalFiguras = 5;
coloresFiguras = ['r','g','b','y','c'];
se = strel('disk', 20);
cform = makecform('srgb2cmyk');
% VIDEO
video = videoinput('winvideo', 1, 'MJPG_800x600');
% 320x240, 640x360, 640x480, 800x600
video.FramesPerTrigger = inf; % Adqusicion continua de frames
video.ReturnedColorSpace = 'rgb'; % Formato de color de la entrada de video
video.FrameGrabInterval = 1; % Se almacenan todos los frames : 15FPS
start(video) % Se inicia el proceso de adquisicion de frames
flag = 1;
while(flag == 1)
captura = getdata(video, 1); % Se obtiene la imagen desde el buffer de datos del objeto de entrada de video
captura = flip(captura, 2); % Invierte las filas de la matriz / Efecto espejo
% PROCESAMIENTO DE LA IMAGEN
% RED
red = imsubtract(captura(:,:,1), rgb2gray(captura)); % Capa R del modelo RGB
cmyk = applycform(captura, cform); % Obtencion de imagen en modelo CMYK
magenta = cmyk(:,:,2); % Capa M (Magenta) del modelo CMYK
baseImage = imadd(red, magenta); % Se obtiene un destacamiento de los niveles de rojo en la imagen
% REDUCCION DE RUIDO
baseImage = medfilt2(baseImage); % Proceso de filtrado medio a la imagen base para reducir el ruido
% BINARIZACION
level = 0.999; % Umbral
imagebw = im2bw(baseImage, level); % Obtencion de imagen binaria
% REFINADO DE OBJETOS
imagebw = bwareaopen(imagebw, 1000);
% Se remueven los objetos pequeños de la imagen binaria obtenida: Objetos con menos de 1000 bits.
imagebw = imclose(imagebw, se); % Operacion morfologica de cierre
% ETIQUETADO DE OBJETOS
imagebw = bwlabel(imagebw, 4);
objetos = regionprops(imagebw, 'BoundingBox', 'Centroid');
% CONFIGURACION DE PANTALLA
% MOSTRAR IMAGEN
imshow(captura);
hold on; % Sobreescribir pantalla
% Cada 2 sec: Cambiar los recuadros de posiciones
if contador == 30
contador = 0;
end
if contador == 0
posicionesAleatorias = generarCoordenadasRectangulos(totalFiguras, alto, ancho, 10);
end
% Dibujar los rectangulos
for i=1:totalFiguras
rectangle('Position', [posicionesAleatorias(i,1),posicionesAleatorias(i,2),ancho,alto],...
'Curvature', [0, 0],...
'EdgeColor', coloresFiguras(i),...
'LineWidth', 1,...
'FaceColor', coloresFiguras(i),...
'LineStyle', '-');
end
% Delimitar Objeto
if(length(objetos) > 0)
delimitador = objetos(1).BoundingBox;
centroide = objetos(1).Centroid;
rectangle('Position', delimitador, 'EdgeColor', 'r', 'LineWidth', 2);
plot(centroide(1), centroide(2), '+');
end
hold off;
%flag = 0;
contador = contador + 1;
end % Fin del while
stop(video); % Detener el proceso de adquisicion de frames
flushdata(video); % Remover datos del buffer de memoria del objeto de entrada de video
delete(video);
La siguiente es una advertencia que me aparece al ejecutar el codigo:
Warning: Image is too big to fit on screen; displaying at 67%
> In images.internal.initSize (line 71)
In imshow (line 305)
Cabe aclarar que reemplazando la línea 69 por : imshow(imresize(captura, 0.67)) ajustando el tamaño de la imagen, esta sigue sin mostrarse.
Agradezco si alguno sabe a que puede deberse la situación. Muchas gracias.
Valora esta pregunta


0