ZBLOG

for (int i = 0; i < rectangleImageOut.rows; ++i) { for (int j = 0; j < rectangleImageOut.cols; ++j) { cv::Point2f point(j, i); double p1 = GetDot(vertices[0], vertices[1], point);//0和1 double...

您可以尝试使用OpenMP来并行化这段代码,并进行约束。下面是一个可能的示例:

  1. #pragma omp parallel for collapse(2)
  2. for (int i = 0; i < rectangleImageOut.rows; ++i)
  3. {
  4. for (int j = 0; j < rectangleImageOut.cols; ++j)
  5. {
  6. cv::Point2f point(j, i);
  7. double p1 = GetDot(vertices[0], vertices[1], point);//0和1
  8. double p2 = GetDot(vertices[0], vertices[3], point);//0和3
  9. double p3 = GetDot(vertices[2], vertices[3], point);//2和3
  10. double p4 = GetDot(vertices[2], vertices[1], point);//2和1
  11. if(p1 < 0 || p2 < 0 || p3 < 0 || p4 < 0)
  12. {
  13. #pragma omp critical
  14. {
  15. rectangleImageOut.at<uchar>(i, j) = 0;
  16. }
  17. }
  18. }
  19. }

在这个示例中,我们使用#pragma omp parallel for collapse(2)将外层循环与内层循环进行了并行化。同时,在对共享变量rectangleImageOut进行写操作时,使用了#pragma omp critical来保证线程安全。

请注意,具体的加速效果取决于您系统的硬件资源以及数据规模等因素。另外,在并行化代码时,请确保对共享资源进行适当的同步控制,以避免竞争条件产生问题。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=16417

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?