Сравнить изображения с помощью systemC

Я написал на этом форуме с просьбой о помощи в решении этой проблемы, которая заняла у меня много времени, я пишу свою первую программу с использованием systemC, я буду излагать свою цель настолько, насколько смогу, я сохранил 2 матрицы значений пикселов изображения в В двух разных текстовых файлах я пишу код systemC, который загружает две матрицы и применяет некоторую абсолютную разницу, если число различных старших значений порога показывает сообщение (движение).

Мой код состоит из двух модулей, первый модуль проверяет, есть ли число, хранящееся в текстовом файле, если да, этот модуль автоматизирует другой модуль для загрузки двух матриц и сравнения их, мне действительно нужен этот код для завершения моего проекта любой помощи или предложение.

#include "systemC.h"
 #include "string.h"
#include "stdio.h"
 #include"stdlib.h"
#include <time.h>
#include <math.h>       /* fabs */
#include <fstream>
 #include <iostream>
  #include <fstream>
 using namespace std; 
 #define _CRT_SECURE_NO_WARNINGS
_CRT_SECURE_NO_WARNINGS
double elapsed;

 int H = 0;
 int D = 0;
 int a, b; 
 int in = false;
 int L = 0;
 char *mode1 = "r";
 char *mode2 = "w";
  int i, j, k;
 int rows1, cols1, rows2, cols2;
 bool fileFound = false;
 FILE *SwitchContext;
 FILE *image1;
 FILE *image2;
 FILE *image3;
 int sum = 0;
 clock_t start = clock();
  SC_MODULE(synchronization)
 {
sc_in<bool>sig ;
SC_CTOR(synchronization)
{
    SC_METHOD(synchroprocess)

}
void synchroprocess()
{
    cout << "\n Running Automation";
    SwitchContext = fopen("F:/SWITCH CONTEXT.txt", mode2);
    fscanf(SwitchContext, "%d", &L);

    while (L != 0)

    {
        cout << "waiting...";
    }
    sig == true;
}

   };



    SC_MODULE(imageProcess)
    {
        sc_in<bool>sig;
            SC_CTOR(imageProcess)
        {
                SC_METHOD(MotionDetector)
                    sensitive(sig);
        }
        void MotionDetector()
        {


                    image3 = fopen("F:/image3.txt", mode2);
                do
                {
                    char *mode1 = "r";
                    char *mode2 = "w";
                    image1 = fopen("F:/image1.txt", mode1);

                          if (!image1)
                          {
                        printf("File Not Found!!\n");
                        fileFound = true;
                          }
                         else
                        fileFound = false;
                          } 
                        while (fileFound);
                          do
                          {
                     image2 = fopen("F:/image2.txt", mode1);
                     if (!image2)
                          {
                        printf("File Not Found!!\n");
                        fileFound = true;
                          }
                         else
                        fileFound = false;
                        } 
                        while (fileFound);
                rows1 = rows2 = 384;
                cols1 = cols2 = 512;

                int **mat1 = (int **)malloc(rows1 * sizeof(int*));
                for (i = 0; i < rows1; i++)
                mat1[i] = (int *)malloc(cols1 * sizeof(int));

                i = 0;

                int **mat2 = (int **)malloc(rows2 * sizeof(int*));
                for (i = 0; i < rows2; i++)
                    mat2[i] = (int *)malloc(cols2 * sizeof(int));

                            i = 0;

                while (!feof(image1))
                {
                    for (i = 0; i < rows1; i++)
                    {
                        for (j = 0; j < cols1; j++)
                            fscanf(image1, "%d%", &mat1[i][j]);
                    }
                }

                i = 0;
                j = 0;

                while (!feof(image2))
                {
                    for (i = 0; i < rows2; i++)
                    {
                        for (j = 0; j < cols2; j++)
                            fscanf(image2, "%d%", &mat2[i][j]);
                    }
                }

                i = 0;
                j = 0;

                    printf("\n\n");
                    for (i = 0; i < rows1; i++)
                {
                    for (j = 0; j < cols1; j++) {
                        a = abs(mat1[i][j] = mat2[i][j]);
                            b = b + a;
                }
                }

                i = j = 0;
                D = b / 196608;

                if (D > 0.9)
                {
                    printf("%d,&K");
                    printf("MOTION...DETECTED");
                    getchar();
                    sc_pause;
                    for (i = 0; i < rows1; i++) {
                        for (j = 0; j < cols1; j++)
                        {
                            fprintf(image3, "%d ", mat2[i][j]);
                        }

                        fprintf(image3, "\n");
                    }
                    printf("\n Image Saved...."); 
                    std::ofstream mon_fichier("F:\toto.txt");
                    mon_fichier << elapsed << '\n';
                    }

                    fclose(image1);
                    fclose(image2);
                    fclose(image3);
                    clock_t end = clock();
                    elapsed = ((double)end - start) / CLOCKS_PER_SEC;
                    printf("time is %f", elapsed);

                    }
                 };

    int sc_main(int argc, char* argv[])
    {
            imageProcess master("EE2");
            master.MotionDetector();

        sc_start();
        return(0);
    }

1 ответ

То, что вы сделали, в основном неправильно.

  • Вы копируете вставленный код в SC_MODULEэтот код является простым C-кодом
  • (Не смешивайте файлы C и C++)
  • Это не то, как вы используете часы

Что ты должен делать:

  • Вам нужно проверить, работает ли ваш алгоритм, для этого вам вообще не нужен SystemC
  • Затем вы можете заменить типы данных на HW и проверить, работает ли он по-прежнему.
  • Затем вы должны найти, какой интерфейс данных используется в HW и как использовать этот интерфейс.
  • Затем вы должны настроить свой алгоритм. работать с этим интерфейсом (там можно использовать SC_MODULE, sc порты и т.д...)

Также взгляните на SC_CTHREADВам это понадобится.

Без какой-либо информации о целевой платформе я не могу предоставить никакой другой помощи.

Другие вопросы по тегам