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

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

Войти
Регистрация
Восстановить пароль
 
BigApple
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 35
#1

Нахождение границ изображения оператором Собеля - C++

31.03.2014, 11:19. Просмотров 961. Ответов 7
Метки нет (Все метки)

Доброе время суток, форумчане! Нуждаюсь в вашей помощи! Выручайте!!!

Проблема состоит в непростом задании. Само задание выглядит так: Нахождение границ изображения оператором Собеля с использованием технологий параллельного программирования.

Я решил взять технология OpenMP, которая есть в языке С++, и сделал некоторые наброски для себя изучив разные материала из интернета:
Кликните здесь для просмотра всего текста

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
#include "stdafx.h"
#include<iostream>
#include<omp.h>
#include<cmath>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
 
int xGradient(Mat image, int x, int y)
{
return image.at<uchar>(y-1, x-1) +
            2*image.at<uchar>(y, x-1) +
             image.at<uchar>(y+1, x-1) -
              image.at<uchar>(y-1, x+1) -
               2*image.at<uchar>(y, x+1) -
                image.at<uchar>(y+1, x+1);
}
int yGradient(Mat image, int x, int y)
{
    return image.at<uchar>(y-1, x-1) +
            2*image.at<uchar>(y-1, x) +
             image.at<uchar>(y-1, x+1) -
              image.at<uchar>(y+1, x-1) -
               2*image.at<uchar>(y+1, x) -
                image.at<uchar>(y+1, x+1);
}
int main()
 
 {
 
  Mat src, grey, dst;
 double start, end;
     start = omp_get_wtime();
  int gx, gy, sum;
src= imread("E:/image.jpg");  
cvtColor(src,grey,CV_BGR2GRAY);
  dst = grey.clone();
  if( !grey.data )
  { return -1; }
 #pragma omp parallel for  
  for(int y = 0; y < grey.rows; y++)
        for(int x = 0; x < grey.cols; x++)
            dst.at<uchar>(y,x) = 0;  
 #pragma omp parallel for
   #pragma omp parallel for private (gx, gy, sum) //num_threads (2)
    for(int y = 1; y < grey.rows - 1; y++){
        for(int x = 1; x < grey.cols - 1; x++){     
            gx = xGradient(grey, x, y);
            gy = yGradient(grey, x, y);
            sum = abs(gx) + abs(gy);
            sum = sum > 255 ? 255:sum;
            sum = sum < 0 ? 0 : sum;
            dst.at<uchar>(y,x) = sum;
        }
    }
    namedWindow("sobel");
    imshow("sobel", dst);
    namedWindow("grayscale");
    imshow("grayscale", grey);
    namedWindow("Original");
    imshow("Original", src);
    end = omp_get_wtime();
    cout<<"time is: "<<(end-start)<< " seconds" <<endl;
waitKey();
    return 0;
}

В итоге Visual Studio выводит море ошибок (В опциях самой программы вкл. OpenMP). Что было сделано не так или возможно я не везде все подключил?! Как видите много я не знаю, но горю желанием узнать! HELP!!!

Помогите решить данную задачи! Возможно у кого-нибудь есть варианты получше с другими технологиями параллельного программирования (CUDE, C++AMP, MPI (и MPI.NET), OpenCL, и т.п.)? Буду рад любой помощи! Так же приветствуются варианты на языке С#, если таковые имеются конечно! Выручайте!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2014, 11:19     Нахождение границ изображения оператором Собеля
Посмотрите здесь:

C++ Функция с оператором
Помогите с фильтром Собеля C++
C++ Ошибка с оператором
C++ переменные с оператором If
Решить с оператором while C++
C++ Помогите с оператором условия
помогите с оператором условия C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 339
Записей в блоге: 2
31.03.2014, 12:56     Нахождение границ изображения оператором Собеля #2
А какие ошибки то выводит?
BigApple
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 35
31.03.2014, 14:31  [ТС]     Нахождение границ изображения оператором Собеля #3
НеСказочник, спасибо, что откликнулись! Ошибок, как я уже упоминал, вышло довольна таки много и описывать все думаю не стоит. Данный код я собирал, подправлял из разных источников. Собирал по крупицам и в итоге получилось то, что вы видите! Очень плохо знаком с самой технологией и ее нюансах! Нуждаюсь в совете знающий людей о том, как решить данную задачу! Либо сделать анализ выше упомянутого мною кода!

В основном ошибки с идентификаторами и они связаны, как я понял, с тем, что не удается открыть источник файл <opencv2/imgproc/imgproc.hpp> и <opencv2/highgui/highgui.hpp>. Опять таки повторюсь я собирал, подправлял код из разных источников и плохо знаком со всеми тонкостями самой технологии!

Если есть предложения как решить эту задачу возможно и с другими технологиями, буду очень рад увидеть их! Выручайте!
НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 339
Записей в блоге: 2
31.03.2014, 15:33     Нахождение границ изображения оператором Собеля #4
Цитата Сообщение от BigApple Посмотреть сообщение
В основном ошибки с идентификаторами и они связаны, как я понял, с тем, что не удается открыть источник файл <opencv2/imgproc/imgproc.hpp> и <opencv2/highgui/highgui.hpp>
Попробуйте проверить все ли файлы на месте и правильно-ли называются. Приведённые вами ошибки связанны с openCV, а точнее с нехваткой hpp файлов. У вас вообще есть OpenCV?

Добавлено через 53 минуты
OpenCV - библиотека для обработки изображений. Её нужно дополнительно скачивать, если Вы её используете. А так же не забыть подключить её к проекту.
BigApple
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 35
31.03.2014, 21:44  [ТС]     Нахождение границ изображения оператором Собеля #5
НеСказочник, спасибо за подсказку! Настроил OpenCV под свою версию Visual. Теперь в самом коде, программа ошибок не видит, но после компиляции выводится одна ошибка!

Ошибку он видит на линии: #pragma omp parallel for private (gx, gy, sum)
Ошибка:Требуется цикл FOR, следующий за директивой "OpenMP" "parallel for"

Уже сломал голову! Вижу вы знающий человек! Помогите пожалуйста! Как быть в этой ошибкой?!
BigApple
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 35
31.03.2014, 22:19  [ТС]     Нахождение границ изображения оператором Собеля #6
НеСказочник, прощу прощение! Только что заметил, что на 45-ой строке у меня не нужная строка оказалось!
Попробовал опять запустить программу, но опять ругается!
На этот раз ошибка выглядит так: не удается открыть входной файл "opencv_oc1248.lib"

Меня больше всего удивляет то, что я по идее ее добавлял! Ниже можете это увидеть на картинке!
Миниатюры
Нахождение границ изображения оператором Собеля  
НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 339
Записей в блоге: 2
31.03.2014, 22:24     Нахождение границ изображения оператором Собеля #7
Цитата Сообщение от BigApple Посмотреть сообщение
Меня больше всего удивляет то, что я по идее ее добавлял! Ниже можете это увидеть на картинке!
А адрес каталога, где OpenCV хранится Вы добавляли? Это там же в настройках. Называется "каталоги C++ ", или что-то вроде того. Там несколько настроек, все обычные строки. В каждой из них перечисленны адреса каталогов. В том, в котором упоминается lib или library перечислены адреса каталогов в которых с++ ищет либы. Если каталог, в котором находится библиотека, туда не добавлен, то подключать либу бесполезно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2014, 22:29     Нахождение границ изображения оператором Собеля
Еще ссылки по теме:

C++ Задача с оператором if
Оператор Собеля для каждого елемента матрицы C++
Посчитать раздел границы фильтром Собеля и псевдомедианой C++
C++ С++ и OpenCV. Оператор Собеля
Работа с оператором for C++

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

Или воспользуйтесь поиском по форуму:
BigApple
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 35
31.03.2014, 22:29  [ТС]     Нахождение границ изображения оператором Собеля #8
НеСказочник, жестоко сглупил! Прощу прощение, что побеспокоил вас! Оказалось банальная опечатка в коде и кое где не до конца настроил! Тема закрыта!
Yandex
Объявления
31.03.2014, 22:29     Нахождение границ изображения оператором Собеля
Ответ Создать тему
Опции темы

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