将IplImage转换为Mat时出错

时间:2016-04-01 02:25:38

标签: c++ xcode opencv

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#define ESTOQUEtamanho 100
#define CLIENTEStamanho 100
#define VENDEDOREStamanho 100
#define VENDAStamanho 100

struct PRODUTO {
    char codigo[20];
    char descricao[100];
    int quantidade;
    float precoCusto;
    float precoVenda;
    char livre;
};
struct CLIENTE {
    char nome[100];
    char cpf[20];
    char livre;
};
struct VENDEDOR {
    char nome[100];
    char cpf[20];
    char livre;
};
struct VENDA {
    char cliente[100];
    char vendedor[100];
    char produto[20];
    int quantidade;
    float caixa;
    char livre;
};

struct PRODUTO estoque[ESTOQUEtamanho];
struct CLIENTE clientes[CLIENTEStamanho];
struct VENDA vendas[VENDAStamanho];
struct VENDEDOR vendedores[VENDEDOREStamanho];


void inicializa(){
    int i;
    for (i=0;i<ESTOQUEtamanho;i++)
        estoque[i].livre=1;
    for (i=0;i<CLIENTEStamanho;i++)
        clientes[i].livre=1;
    for (i=0;i<VENDEDOREStamanho;i++)
        vendedores[i].livre=1;
    for (i=0;i<VENDAStamanho;i++)
        vendas[i].livre=1;
}

int insereEstoque (char *c, char *d, int q, float pC, float pV){
    int i;
    for (i=0;i<ESTOQUEtamanho;i++) {
        if (estoque[i].livre) {
           strcpy(estoque[i].codigo, c);
           strcpy(estoque[i].descricao, d);
           estoque[i].quantidade = q;
           estoque[i].precoCusto = pC;
           estoque[i].precoVenda = pV;
           estoque[i].livre=0;
           return(1);
        }
    }
    return(0);
}
void listarEstoque(){
    int i;
    for (i=0;i<ESTOQUEtamanho;i++)
       if (!estoque[i].livre)
             printf("\n-------------------------\nCodigo: %s\nDescricao: %s\nQuantidade: %d\nPreco de Custo: %.2f\nPreco de Venda: %.2f", estoque[i].codigo, estoque[i].descricao, estoque[i].quantidade, estoque[i].precoCusto, estoque[i].precoVenda);
}
int excluirEstoque (char *c){
    int i;
    for (i=0;i<ESTOQUEtamanho;i++){
        if(!estoque[i].livre)
            if(!strcmp(c, estoque[i].codigo)){
                estoque[i].livre = 1;
                return(1);
            }
    }
    return(0);
}

int insereClientes (char *n, char *c){
    int i;
    for (i=0;i<CLIENTEStamanho;i++) {
        if (clientes[i].livre) {
           strcpy(clientes[i].nome, n);
           strcpy(clientes[i].cpf, c);
           clientes[i].livre=0;
           return(1);
        }
    }
    return(0);
}
void listarClientes(){
    int i;
    for (i=0;i<CLIENTEStamanho;i++)
       if (!clientes[i].livre)
             printf("\n-------------------------\nNome: %s\nCPF: %s", clientes[i].nome, clientes[i].cpf);
}
int excluirClientes (char *n){
    int i;
    for (i=0;i<CLIENTEStamanho;i++){
        if(!clientes[i].livre)
            if(!strcmp(n, clientes[i].nome)){
                clientes[i].livre = 1;
                return(1);
            }
    }
    return(0);
}

int insereVendedores (char *n, char *c){
    int i;
    for (i=0;i<VENDEDOREStamanho;i++) {
        if (vendedores[i].livre) {
           strcpy(vendedores[i].nome, n);
           strcpy(vendedores[i].cpf, c);
           vendedores[i].livre=0;
           return(1);
        }
    }
    return(0);
}
void listarVendedores(){
    int i;
    for (i=0;i<VENDEDOREStamanho;i++)
       if (!vendedores[i].livre)
             printf("\n-------------------------\nNome: %s\nCPF: %s", vendedores[i].nome, vendedores[i].cpf);
}
int excluirVendedores (char *n){
    int i;
    for (i=0;i<VENDEDOREStamanho;i++){
        if(!vendedores[i].livre)
            if(!strcmp(n, vendedores[i].nome)){
                vendedores[i].livre = 1;
                return(1);
            }
    }
    return(0);
}

int insereVendas (char *n, char *n2, char *c, int q){
    int i, t, a1;
    t=0;
    for (i=0;i<VENDEDOREStamanho;i++) {
        if(!strcmp(n, vendedores[i].nome)){
            t = 1;
            break;
        }
    }
    if(!t){
        printf("Vendedor nao encontrado");
        return(0);
    }
    t=0;
    for (i=0;i<CLIENTEStamanho;i++) {
        if(!strcmp(n2, clientes[i].nome)){
            t = 1;
            break;
        }
    }
    if(!t){
        printf("Cliente nao encontrado");
        return(0);
    }
    t=0;
    for (i=0;i<ESTOQUEtamanho;i++){
        if(!strcmp(c, estoque[i].codigo)){
           t = 1;
           a1 = i;
           break;
           }
    }
    if(!t){
        printf("Codigo nao encontrado");
        return(0);
    }
    t=0;
    if (q >= estoque[a1].quantidade) return(0);
    for (i=0;i<VENDAStamanho;i++){
        if (vendedores[i].livre){
            strcpy(vendas[i].vendedor, n);
            strcpy(vendas[i].cliente, n2);
            strcpy(vendas[i].produto, c);
            vendas[i].quantidade = q;
            vendas[i].caixa = (estoque[a1].precoVenda - estoque[a1].precoCusto) * q;
            t = 1;
            vendas[i].livre = 0;
            estoque[a1].quantidade = estoque[a1].quantidade - q;
            return(1);
        }
    }
    return(0);
}
void listarVendas(){
    int i;
    for (i=0;i<VENDAStamanho;i++)
       if (!vendas[i].livre)
             printf("\n-------------------------\nID : %d\nVendedor: %s\nCliente: %s\nCodigo do produto: %s\nQuantidade: %d\nFluxo de caixa: %.2f", (i+1), vendas[i].vendedor, vendas[i].cliente, vendas[i].produto, vendas[i].quantidade, vendas[i].caixa);
}
int excluirVendas (int id){
    if (id <= VENDAStamanho){
        vendas[id-1].livre = 1;
        return(1);
    }
    return (0);
}

void teste(){
    srand( (unsigned)time(NULL) );
    int i, x, y;

    strcpy(estoque[0].codigo, "1010");
    strcpy(estoque[0].descricao, "Caneta");
    estoque[0].quantidade = 500;
    estoque[0].precoCusto = 0.09;
    estoque[0].precoVenda = 0.15;
    estoque[0].livre=0;

    strcpy(estoque[1].codigo, "1011");
    strcpy(estoque[1].descricao, "Lapis");
    estoque[1].quantidade = 852;
    estoque[1].precoCusto = 0.04;
    estoque[1].precoVenda = 0.10;
    estoque[1].livre=0;

    strcpy(estoque[2].codigo, "1012");
    strcpy(estoque[2].descricao, "Lapiseira B1");
    estoque[2].quantidade = 182;
    estoque[2].precoCusto = 0.58;
    estoque[2].precoVenda = 1.20;
    estoque[2].livre=0;

    strcpy(estoque[3].codigo, "1013");
    strcpy(estoque[3].descricao, "Lapiseira C2");
    estoque[3].quantidade = 127;
    estoque[3].precoCusto = 0.74;
    estoque[3].precoVenda = 1.50;
    estoque[3].livre=0;

    strcpy(estoque[4].codigo, "1014");
    strcpy(estoque[4].descricao, "Lapis de colorir 12 unidades");
    estoque[4].quantidade = 193;
    estoque[4].precoCusto = 2.83;
    estoque[4].precoVenda = 4.99;
    estoque[4].livre=0;

    strcpy(estoque[5].codigo, "1015");
    strcpy(estoque[5].descricao, "Lapis de colorir 24 unidades");
    estoque[5].quantidade = 142;
    estoque[5].precoCusto = 3.78;
    estoque[5].precoVenda = 9.99;
    estoque[5].livre=0;

    strcpy(estoque[6].codigo, "1016");
    strcpy(estoque[6].descricao, "Apontador");
    estoque[6].quantidade = 127;
    estoque[6].precoCusto = 0.59;
    estoque[6].precoVenda = 1.10;
    estoque[6].livre=0;

    strcpy(estoque[7].codigo, "1017");
    strcpy(estoque[7].descricao, "Regua 15cm");
    estoque[7].quantidade = 89;
    estoque[7].precoCusto = 3.19;
    estoque[7].precoVenda = 4.59;
    estoque[7].livre=0;

    strcpy(estoque[8].codigo, "1018");
    strcpy(estoque[8].descricao, "Regua 30cm");
    estoque[8].quantidade = 278;
    estoque[8].precoCusto = 5.24;
    estoque[8].precoVenda = 8.75;
    estoque[8].livre=0;

    strcpy(estoque[9].codigo, "1019");
    strcpy(estoque[9].descricao, "Folha A4 500 unidades");
    estoque[9].quantidade = 124;
    estoque[9].precoCusto = 3.56;
    estoque[9].precoVenda = 8.00;
    estoque[9].livre=0;

    strcpy(clientes[0].nome, "Adriano Goes");
    strcpy(clientes[0].cpf, "15863248759");
    clientes[0].livre = 0;

    strcpy(clientes[1].nome, "Ane Kilpp");
    strcpy(clientes[1].cpf, "47895426895");
    clientes[1].livre = 0;

    strcpy(clientes[2].nome, "Bruna Oliveira");
    strcpy(clientes[2].cpf, "78945875247");
    clientes[2].livre = 0;

    strcpy(clientes[3].nome, "Caroline Zortea");
    strcpy(clientes[3].cpf, "15648763298");
    clientes[3].livre = 0;

    strcpy(clientes[4].nome, "Cassiano Miranda");
    strcpy(clientes[4].cpf, "78942576354");
    clientes[4].livre = 0;

    strcpy(clientes[5].nome, "Eduardo Godoy");
    strcpy(clientes[5].cpf, "78914455855");
    clientes[5].livre = 0;

    strcpy(clientes[6].nome, "Felipe Beal");
    strcpy(clientes[6].cpf, "65632986452");
    clientes[6].livre = 0;

    strcpy(clientes[7].nome, "Gian Lucas");
    strcpy(clientes[7].cpf, "22354785740");
    clientes[7].livre = 0;

    strcpy(clientes[8].nome, "Juliana Freitas");
    strcpy(clientes[8].cpf, "02546583254");
    clientes[8].livre = 0;

    strcpy(clientes[9].nome, "Lais Bressan");
    strcpy(clientes[9].cpf, "65024580545");
    clientes[9].livre = 0;

    strcpy(vendedores[0].nome, "Arthur Duarte");
    strcpy(vendedores[0].cpf, "07964619957");
    vendedores[0].livre=0;

    strcpy(vendedores[1].nome, "Pauo Ricardo");
    strcpy(vendedores[1].cpf, "15784602510");
    vendedores[1].livre=0;

    for(i=0;i<((rand()%15)+5);i++){
        x = rand()%2;
        strcpy(vendas[i].vendedor, vendedores[x].nome);
        x = rand()%9;
        strcpy(vendas[i].cliente, clientes[x].nome);
        x = rand()%9;
        strcpy(vendas[i].produto, estoque[x].codigo);
        y = (rand()%15)+1;
        vendas[i].quantidade = y;
        vendas[i].caixa = (estoque[x].precoVenda - estoque[x].precoCusto) * y;
        vendas[i].livre = 0;
        estoque[x].quantidade = estoque[x].quantidade - y;
    }
}



int main(){


    int opc1, opcEstoque, opcClientes, opcVendedores, opcVendas, opcTeste;

    char codigo[20], descricao[100], nome[100], nome2[100], cpf[20], cliente[100];
    int quantidade, id;
    float precoCusto, precoVenda;

    inicializa();

    printf("Para rodar o teste digite 1 ,0 para sair: ");
    scanf("%d%*c", &opcTeste);
    if(opcTeste == 1) teste();

    while (1) {
        printf("\n-------------------------------\nControle de Estoque\n\tOpcoes:\n\t1-Estoque\n\t2-Cliente\n\t3-Vendedor\n\t4-Venda\n\nEntre com sua opcao: ");
        opc1=getchar();getchar();
        switch (opc1) {
            case '1': printf("\n-------------------------------\nEstoque\n\tOpcoes:\n\t1-Incluir\n\t2-Listar\n\t3-Excluir\n\t0-Voltar\n\nEntre com sua opcao:");
                opcEstoque=getchar();getchar();
                switch (opcEstoque){
                    case '1':printf("\nEntre com o codigo: ");
                        gets(codigo);
                        printf("\nEntre com a descricao: ");
                        gets(descricao);
                        printf("\nEntre com a quantidade: ");
                        scanf("%d", &quantidade);
                        printf("\nEntre com o preco de custo: ");
                        scanf("%f", &precoCusto);
                        printf("\nEntre com preco de venda: ");
                        scanf("%f", &precoVenda);
                        if (insereEstoque (codigo, descricao, quantidade, precoCusto, precoVenda)) printf("\nProduto Incluso");
                        else printf("\nFalha na inclusao");
                        break;
                    case '2': listarEstoque();
                        break;
                    case '3': printf("\nEntre com o codigo para excluir: ");
                        gets(codigo);
                        if (excluirEstoque (codigo)) printf("\nProduto Excluido");
                        else printf("\nFalha na exclusao");
                        break;
                    default: printf("\nOpcao nao implementada! ");
                        break;
                }break;
            case '2': printf("\n-------------------------------\nClientes\n\tOpcoes:\n\t1-Incluir\n\t2-Listar\n\t3-Excluir\n\t0-Voltar\n\nEntre com sua opcao:");
                opcClientes=getchar();getchar();
                switch (opcClientes){
                    case '1':printf("\nEntre com o nome: ");
                        gets(nome);
                        printf("\nEntre com o cpf: ");
                        gets(cpf);
                        if (insereClientes (nome, cpf)) printf("\nCliente Incluso");
                        else printf("\nFalha na inclusao");
                        break;
                    case '2': listarClientes();
                        break;
                    case '3': printf("\nEntre com o nome para excluir: ");
                        gets(nome);
                        if (excluirClientes (nome)) printf("\nCliente Excluido");
                        else printf("\nFalha na exclusao");
                        break;
                    default: printf("\nOpcao nao implementada! ");
                        break;
                }break;
            case '3': printf("\n-------------------------------\nVendedores\n\tOpcoes:\n\t1-Incluir\n\t2-Listar\n\t3-Excluir\n\t0-Voltar\n\nEntre com sua opcao:");
                opcVendedores=getchar();getchar();
                switch (opcVendedores){
                    case '1':printf("\nEntre com o nome: ");
                        gets(nome);
                        printf("\nEntre com o cpf: ");
                        gets(cpf);
                        if (insereVendedores (nome, cpf)) printf("\nVendedor Incluso");
                        else printf("\nFalha na inclusao");
                        break;
                    case '2': listarVendedores();
                        break;
                    case '3': printf("\nEntre com o nome para excluir: ");
                        gets(nome);
                        if (excluirVendedores (nome)) printf("\nVendedor Excluido");
                        else printf("\nFalha na exclusao");
                        break;
                    default: printf("\nOpcao nao implementada! ");
                        break;
                }break;
            case '4': printf("\n-------------------------------\nVendas\n\tOpcoes:\n\t1-Incluir\n\t2-Listar\n\t3-Excluir\n\t0-Voltar\n\nEntre com sua opcao:");
                opcVendas=getchar();getchar();
                switch (opcVendas){
                    case '1':printf("\nEntre com o nome do Vendedor: ");
                        gets(nome);
                        printf("\nEntre com o nome do Cliente: ");
                        gets(nome2);
                        printf("\nEntre com o codigo do produto: ");
                        gets(codigo);
                        printf("\nEntre com o numero de produtos: ");
                        scanf("%d", &quantidade);
                        if (insereVendas (nome, nome2, codigo, quantidade)) printf("\nVenda Inclusa");
                        else printf("\nFalha na inclusao");
                        break;
                    case '2': listarVendas();
                        break;
                    case '3': printf("\nEntre com o ID da Venda para excluir: ");
                        scanf("%d", id);
                        if (excluirVendas (id)) printf("\nVenda Excluida");
                        else printf("\nFalha na exclusao");
                        break;
                    default: printf("\nOpcao nao implementada! ");
                        break;
                }break;
            default: printf("\nOpcao nao implementada! ");
                break;
        }
    }
}

此代码应将img转换为Mat格式。但是,当我实现这个时,我收到一条错误,上面写着“没有用于初始化cv :: Mat的匹配构造函数”。

我在哪里做错了?语法应该是正确的,所以我认为问题出在其他地方。我在OSX Yosemite中使用OpenCV 3.1.0和Xcode 7.2.1。

提前谢谢

2 个答案:

答案 0 :(得分:1)

似乎构造函数cv :: Mat(IplImages *)已从 core / src / matrix.cpp 中消失。顺便说一句,我找到了另一种选择。

Mat mtx = cv::cvarrToMat(img);

应该这样做。

答案 1 :(得分:1)

这些也可以使用:

// Method 1
Mat mtx = img;

// Method 2 (`true` stands for whether you want a deepcopy)
Mat mtx(img, true);