Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
snowleo
14 / 0 / 0
Регистрация: 17.06.2014
Сообщений: 15
#1

Opencv-gabor filter не сохраняет результирующую картинку - C++

19.11.2014, 01:42. Просмотров 467. Ответов 1
Метки нет (Все метки)

Здравствуйте. Мне необходим фильтр Габора. Нашел реализацию в инете, но не получается сохранить результат. Т.е. картинка то сохраняется, но она просто заполнена черным цветом.
C
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
#include "stdafx.h"
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <math.h>
 
      cv::Mat mkKernel(int ks, double sig, double th, double lm, double ps)
      {
          int hks = (ks-1)/2;
          double theta = th*CV_PI/180;
          double psi = ps*CV_PI/180;
          double del = 2.0/(ks-1);
          double lmbd = lm;
          double sigma = sig/ks;
          double x_theta;
          double y_theta;
          cv::Mat kernel(ks,ks, CV_32F);
          for (int y=-hks; y<=hks; y++)
          {
              for (int x=-hks; x<=hks; x++)
              {
                  x_theta = x*del*cos(theta)+y*del*sin(theta);
                  y_theta = -x*del*sin(theta)+y*del*cos(theta);
                  kernel.at<float>(hks+y,hks+x) = (float)exp(-0.5*(pow(x_theta,2)+pow(y_theta,2))/pow(sigma,2))* cos(2*CV_PI*x_theta/lmbd + psi);
              }
          }
          return kernel;
      }
 
      int kernel_size=21;
      int pos_sigma= 4;
      int pos_lm = 37;
      int pos_th = 0;
      int pos_psi = 78;
      cv::Mat src_f;
      cv::Mat dest;
      cv::Mat image;
 
      void Process(int , void *)
      {
          double sig = pos_sigma;
          double lm = 0.5+pos_lm/100.0;
          double th = pos_th;
          double ps = pos_psi;
          cv::Mat kernel = mkKernel(kernel_size, sig, th, lm, ps);
          cv::filter2D(src_f, dest, CV_32F, kernel);
          //cv::imshow("Process window", dest);
          cv::Mat Lkernel(kernel_size*20, kernel_size*20, CV_32F);
          cv::resize(kernel, Lkernel, Lkernel.size());
          Lkernel /= 2.;
          Lkernel += 0.5;
          //cv::imshow("Kernel", Lkernel);
          cv::Mat mag;
          cv::pow(dest, 2.0, mag);
          cv::imshow("Mag", mag);
          //IplImage* image1 = cvCloneImage(&(IplImage)mag);
          //cvSaveImage("gab.bmp", image1, NULL);
         cv::imwrite("gab.bmp", mag);
      }
 
      int main(int argc, char** argv)
      {
          int e = argc;
          char st[_MAX_PATH];
          strcpy(st, argv[1]);
          image = cv::imread(st, 1);
          //cv::imshow("Src", image);
          //cv::Mat src;
          //cv::cvtColor(image, src, CV_BGR2GRAY);
          image.convertTo(src_f, CV_32F, 1.0/255, 0);
          if (!kernel_size%2)
          {
              kernel_size+=1;
          }
          //cv::namedWindow("Process window", 0);
          //cv::createTrackbar("Sigma", "Process window", &pos_sigma, kernel_size, Process);
          //cv::createTrackbar("Lambda", "Process window", &pos_lm, 100, Process);
          //cv::createTrackbar("Theta", "Process window", &pos_th, 180, Process);
          //cv::createTrackbar("Psi", "Process window", &pos_psi, 360, Process);
          Process(0,0);
          cv::waitKey(0);
          return 0;
      }
Подозреваю, что дело в функции convertTo().
Подскажите, как нормально сохранить результат.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2014, 01:42     Opencv-gabor filter не сохраняет результирующую картинку
Посмотрите здесь:
C++ OpenCV 3.2.0 не открывает картинку imshow
Дан массив студентов ВУЗа: ФИО, возраст, регион, факультет. Вывести на экран результирующую таблицу: регион, количество студентов из этого региона C++
C++ Реализация Filter Cloud в Photoshop
Робот, вероятность местонахождения в мире с ориентирами, histogram filter C++
Неправильно сохраняет данные C++
C++ Запись в blob.Не сохраняет jpeg.
Не правильно сохраняет текст в файл C++
C++ Как компилятор сохраняет константы?
OpenCV C++
OpenCV 3.0 C++
OpenCV C++
OpenCV установка C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Людвиг Бодмер
331 / 328 / 123
Регистрация: 29.03.2013
Сообщений: 812
Завершенные тесты: 4
19.11.2014, 11:45     Opencv-gabor filter не сохраняет результирующую картинку #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
snowleo, а image.convertTo(src_f, CV_8UC3, 255.0); пробовали?
Yandex
Объявления
19.11.2014, 11:45     Opencv-gabor filter не сохраняет результирующую картинку
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru