kilop 7 Жалоба Опубликовано December 5, 2011 уважаемые форумчане,возникла следующая проблема. Работую в qt в связке с openCV, вызываю функцию cvSmooth(img,dest, CV_GAUSSIAN,3,0). И возникает следующая проблема, если она вызывается в конструкторе класса основного окна, то все нормально, функция работает. Если вызывает просто в функции, допустим при нажатии кнопки, то возникает ошибка "Инструкция по адресу 0x68925782" обратилась к памяти по адресу и так далее... Никто не сталкивался с похожей проблемы или нет идей решения? Отключать DEP прообовал, результата нет. Главный вопрос,не понятно, что делать и почему работает в конструкторе? Если у кого возникала такая проблема, подскажите или возможные пути решения. Потому что я отчаялся найти выход. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано December 5, 2011 Ну, без кода и без отладчика мы никак не поможем. Скорее всего, ты обращаешься к уже удалённой памяти. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kilop 7 Жалоба Опубликовано December 5, 2011 да в том то и дело, что просто cvSmooth(img,dest, CV_GAUSSIAN,3,3), если в конструкторе все норм, если как слот, то проблемы, причем прямо перед входом в функцию проверяю, чтот за значения в img и dest,там фотографии, 3-цветные,8-битовые, все нормально, а не катит. может в сборке библиотеки проблемы думаю... Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kilop 7 Жалоба Опубликовано December 5, 2011 вот абсолютно простой пример, и то он не работает //заголовочный файл #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 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано December 5, 2011 Выложи проект целиком, со всеми файликами. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
kilop 7 Жалоба Опубликовано December 5, 2011 мне посоветовали использовать так 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); } и в данном случае все работает Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах