【发布时间】:2013-05-29 08:21:30
【问题描述】:
我有问题。我需要使用 OpenCV Mat 图像结构将多个参数传递给线程。
我有一个这样的结构:
struct Args
{
Mat in[6];
Mat out[6];
};
还有一个线程调用的void函数,像这样:
void grey (void *param){
while (TRUE)
{
WaitForSingleObject(mutex,INFINITE);
Args* arg = (Args*)param;
cvtColor(*arg->in,*arg->out,CV_BGR2GRAY);
ReleaseMutex(mutex);
_endthread();
}
}
为了将灰色函数作为带有两个 Mat 数组参数的线程启动,我在 main 中使用以下行:
Args dati;
*dati.in = *inn;
*dati.out = *ou;
handle1 = (HANDLE) _beginthread(grey,0,&dati);
现在,我的问题是:我需要访问从线程本身传递给线程的结构中的两个数组“in”和“out”的所有 6 个元素,或者找到一种将数组从 0 转换为 5 的模式以进行详细说明所有具有“灰色”功能的元素。
如何从线程或主线程执行此操作?我的意思是使用灰色函数来详细说明我在该模式下传递给线程的 struct Args [6] 中的数组 Mat 的所有 6 个元素。
有人可以帮助我或给我一个想法吗?我不知道这是怎么做到的。
【问题讨论】:
-
你的问题不是很清楚。如果你的意思是说你想在线程已经创建时将变量值传递给它,你可以考虑使用“队列”....
-
您的线程已经在结构中的数组中包含所有六个条目,但您只是设置和访问第一个条目。如果你想在线程中复制数组,所以你的洗牌不会改变结构中的数组,那么只需在线程函数和copy it中创建新数组。
-
另外,为什么线程函数中有循环,当你一释放互斥锁就退出线程?
-
正是...如何在一个线程中处理所有六张图片?我可以做吗?还是我必须为每个单独的图像创建一个线程?如何创建队列?我为这个问题道歉,但直到最近我才不得不处理线程......
-
遍历它们?
for (int i = 0; i < 6; i++) { /* use arg->in[i] */ }?当然,这需要您在将数组传递给数组之前正确设置数组,而您现在不这样做。