Soy nuevo en opencv y estoy tratando en algunos códigos de ejemplo.

en un código, Mat gr(row1,col1,CV_8UC1,scalar(0));
int x = gr.at<uchar> (row,col);

Y en otra,

Mat grHistrogram(301,260,CV_8UC1,Scalar(0,0,0));
line(grHistrogram,pt1,pt2,Scalar(255,255,255),1,8,0);

Ahora mi pregunta es si yo solía escalar(0) en lugar de escalar(0,0,0) en el segundo código, El código no funciona.
1.¿Por qué esta sucediendo, ya que, a la vez de crear una Estera de la estructura de la imagen.
2.¿cuál es el propósito de la const cv:Escalar &_s.

La búsqueda de la Documentación correspondiente a partir de Opencv sitio (opencv.pdf,opencv2refman.pdf) y Oreilly del Opencv libro. Pero no podía encontrar una explica respuesta.

Creo que estoy usando el Mat(int _rows,int _cols,int _type,const cv:Escalar &_s) struct.

  • ¿qué entiende usted por «el código no funciona»? La línea que producen el error?
InformationsquelleAutor Lusy7 | 2015-02-28

2 Comentarios

  1. 20

    Primer lugar, usted necesita la siguiente información para crear la imagen:

    1. Ancho: 301 píxeles
    2. Altura: 260 píxeles
    3. Cada valor de píxel (intensidad) 0 ~ 255: 8 bits entero sin signo
    4. Admite todos los colores RGB: 3 canales
    5. Inicial color: negro = (B, G, R) = (0, 0, 0)

    Puede crear la Imagen con cv::Mat:

    Mat grHistogram(260, 301, CV_8UC3, Scalar(0, 0, 0));

    La 8U significa que el 8bits Uentero con signo, C3 significa 3 Channels de color RGB, y Scalar(0, 0, 0) es el valor inicial para cada píxel. Del mismo modo,

    line(grHistrogram,pt1,pt2,Scalar(255,255,255),1,8,0);

    es para dibujar una línea en grHistogram desde el punto pt1 a punto de pt2. El color de la línea es de color blanco (255, 255, 255) con 1 píxel de grosor, de 8 de la línea conectada, y 0-shift.

    A veces no necesitan un RGB del color de la imagen, sino una simple imagen en escala de grises. Es decir, utilizar un canal en lugar de tres. El tipo puede ser cambiado a CV_8UC1 y sólo es necesario especificar la intensidad de un canal, Scalar(0) por ejemplo.

    De regreso a su problema,

    ¿Por qué esta sucediendo, ya que, a la vez de crear una Estera de la estructura de la imagen?

    Porque es necesario especificar el tipo de la Mat. Es una imagen de color CV_8UC3 o una imagen en escala de grises CV_8UC1? Ellos son diferentes. El programa puede no funcionar como usted piensa si utiliza Scalar(255) en un CV_8UC3 imagen.

    ¿Cuál es el propósito de la const cv:Escalar &_s ?

    cv::Scalar se utiliza para especificar el valor de intensidad de cada píxel. Por ejemplo, Scalar(255, 0, 0) es de color azul y Scalar(0, 0, 0) es negro, si el tipo es CV_8UC3. O Scalar(0) es negro si es un CV_8UC1 imagen en escala de grises. Evitar la mezcla de ellos juntos.

Dejar respuesta

Please enter your comment!
Please enter your name here