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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Переписать рекурсивно итерационную функцию. http://www.cyberforum.ru/cpp-beginners/thread1134638.html
Кто может записать эту итерационную функцию: double norek(double a, double b, double e){ double x; while (fabs(b - a) >= e) { x = (a + b) / 2; if (func(x+e)>func(x-e)) b = x; else a = x; }
C++ Ввести структуру Историческое событие /*2. Ввести структуру ИСТОРИЧЕСКОЕ СОБЫТИЕ с полями ЧИСЛО, МЕСЯЦ, ГОД, СОБЫТИЕ. Составить и протестировать функцию a) ввода исторического события; b) вывода на экран списка исторических событий; c) вычисляющую интервал в днях, прошедший между двумя заданными историческими событиями; d) сортирующую массив исторических событий по полю СОБЫТИЕ. Не могу сделать C и D http://www.cyberforum.ru/cpp-beginners/thread1134623.html
Пирамидальная сортировка. Считать из файла массив C++
реализовать алгоритм пирамидальной сортировки исходного массива размерностью 250< n <1000, расположенном в некотором исходном файле. Вот что получилось. Но мне нужно зарандомить файл целыми числами и считать из него массив и отсортировать. #include "stdafx.h" #include <iostream> #include <conio.h> #include <cstdlib> using namespace std; void iswap(int &n1, int &n2)
Даны целые числа a1, a2,.a10. Верно ли, что их сумма есть нечетное число C++
Здрасте) Помогите пожалуйста. Даны целые числа a1, a2,...a10. Верно ли, что их сумма есть нечетное число. Буду благодарен невероятно.
C++ Дано натуральное число n. Определить, является ли високосным год с таким номером http://www.cyberforum.ru/cpp-beginners/thread1134558.html
Ребята , помогите справиться с задачей. Ни как не получается решить.( "Год является високосным, если его год кратен 4, однако из кратных 100 високосными являются, лишь кратные 400, например, 1700, 1800, и 1900-невисокосные годы, 2000-високосный. Дано натуральное число n. Определить, является ли високосным год с таким номером." Буду премного благодарен вам.
C++ Удалить из первой последовательности каждый символ, принадлежащий и второй Даны 2 символьные последовательности. Удалить из первой последовательности каждый символ, принадлежащий и второй последовательности.Распечатать заданные и образованную последовательности. То есть нужно удалить совместные символы. подробнее

Показать сообщение отдельно
BigApple
0 / 0 / 0
Регистрация: 21.02.2014
Сообщений: 35
31.03.2014, 11:19     Нахождение границ изображения оператором Собеля
Доброе время суток, форумчане! Нуждаюсь в вашей помощи! Выручайте!!!

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

Я решил взять технология 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, и т.п.)? Буду рад любой помощи! Так же приветствуются варианты на языке С#, если таковые имеются конечно! Выручайте!!!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 21:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru