任何人都可以帮我编写用c语言生成图像直方图的代码吗?我知道基本逻辑但不能编写代码。我想要一个并行程序。
for(i=0; i<256;i++)
histogram[i]=0;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
color=image[i][j];
histogram[color]++;
}
答案 0 :(得分:0)
我想我会使用线程(与进程)来并行化这个任务(在Unix上使用pthreads)。这样,所有线程都可以共享相同的数据池(而不是必须跨进程边界复制大量的图像数据)。
一种方法是查询系统调用以确定系统有多少CPU线程(n)。然后,分配(n)单独的直方图数组。将图像划分为(n)个水平切片。然后,创建(n)个线程并向每个线程传递一个不同的数字(1..n)。每个线程将处理不同切片的直方图数据,并将结果放在不同的直方图阵列中。
主线程等待(n)工作线程完成,然后将(n)直方图数组加到最终的直方图数组中。
这是解决问题的一种方法。
答案 1 :(得分:0)
OpenMP让这很简单:
#pragma omp for
for(i=0; i<256;i++)
histogram[i]=0;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
color=image[i][j];
histogram[color]++;
}