Перейти к содержимому
Compvision.ru
kilop

ошибка при вызове функции cvSmooth

Recommended Posts

уважаемые форумчане,возникла следующая проблема. Работую в qt в связке с openCV, вызываю функцию cvSmooth(img,dest, CV_GAUSSIAN,3,0). И возникает следующая проблема, если она вызывается в конструкторе класса основного окна, то все нормально, функция работает. Если вызывает просто в функции, допустим при нажатии кнопки, то возникает ошибка "Инструкция по адресу 0x68925782" обратилась к памяти по адресу и так далее... Никто не сталкивался с похожей проблемы или нет идей решения? Отключать DEP прообовал, результата нет. Главный вопрос,не понятно, что делать и почему работает в конструкторе? Если у кого возникала такая проблема, подскажите или возможные пути решения. Потому что я отчаялся найти выход.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну, без кода и без отладчика мы никак не поможем. Скорее всего, ты обращаешься к уже удалённой памяти.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

да в том то и дело, что просто cvSmooth(img,dest, CV_GAUSSIAN,3,3), если в конструкторе все норм, если как слот, то проблемы, причем прямо перед входом в функцию проверяю, чтот за значения в img и dest,там фотографии, 3-цветные,8-битовые, все нормально, а не катит. может в сборке библиотеки проблемы думаю...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

вот абсолютно простой пример, и то он не работает:(

//заголовочный файл

#ifndef MAINWINDOW_H

#define MAINWINDOW_H


#include <QMainWindow>


namespace Ui {

    class MainWindow;

}


class MainWindow : public QMainWindow {

    Q_OBJECT

public:

    MainWindow(QWidget *parent = 0);

    ~MainWindow();

private:

    Ui::MainWindow *ui;

private slots:

   void gausImage();

};

///////////////////////////////////////////////////////////////////////////////

//исходник

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include<highgui.h>

#include <cv.h>

#include<QDebug>

void GaussFromImage( IplImage* dest)

{


    IplImage *img=cvCloneImage(dest);

    cvSmooth(img, dest, CV_GAUSSIAN, 3, 0);

    cvReleaseImage( &img );


}

MainWindow::MainWindow(QWidget *parent) :

        QMainWindow(parent),

        ui(new Ui::MainWindow)

{

    ui->setupUi(this);    

    gausImage();//проводим сглаживание

    connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(gausImage()));//цепляем на кнопку

}



MainWindow::~MainWindow()

{

    delete ui;

}


void MainWindow::gausImage()

{

    IplImage* img = cvLoadImage("C:\\grid.bmp"); // Загружаем изображение

    IplImage* dest= cvCreateImage(cvGetSize(img),8,1);//ч.б изображение

    GaussFromImage(img);//проходим гаусом

    cvCvtColor( img, dest, CV_BGR2GRAY );//конвертируем цвета

    cvReleaseImage(&img);

    cvReleaseImage(&dest);

    qDebug()<<"gaus";

}

////////////////////////////////////////

при нажатии на кнопку,все вылетает и дает ту самую ошибку



#endif // MAINWINDOW_H

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Выложи проект целиком, со всеми файликами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

мне посоветовали использовать так

void MainWindow::on_pushButton_clicked()

{

cv::Mat x = cv::imread("C:/1.jpeg");//Загрузка

cv::Mat y;

cv::blur(x,y,cv::Size(3,3));//Сглаживание гаусом

cv::imwrite("C:/1_out.jpg",y);

}

и в данном случае все работает:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×