小编Ank*_*tam的帖子

MPI_Send()和MPI_Ssend()之间的区别?

我知道MPI_Send()是一个阻塞调用,它等待修改应用程序缓冲区以便重用是安全的.为了使发送调用同步(应该与接收器握手),我们需要使用MPI_Ssend().我想知道两者之间的区别.假设我需要在进程中发送固定数量的字节,哪一个应该花费更长的时间?
对我来说,代码适用于MPI_Send()调用,但无限期地等待MPI_Ssend().可能的原因是什么?

最重要的是,我非常确定在使用时接收过程中正在接收数据MPI_Send(),因此这种推断无助于在使用时等待握手MPI_Ssend().

或者我可以得出结论:MPI_Send()您可以将数据发送到自我过程但不能使用MPI_Ssend()

ipc mpi openmpi

19
推荐指数
1
解决办法
1万
查看次数

如何在openCV中实现的Canny Edge检测算法中选择最佳参数集?

我在Android平台上使用openCV.在这个社区和技术人员的大力帮助下,我能够成功地从图像中检测到一张纸.这些是我使用的步骤.

1.Imgproc.cvtColor()
 2.Imgproc.Canny()
 3.Imgproc.GausianBlur()
 4.Imgproc.findContours()
 5.Imgproc.approxPolyDP()
 6.findLargestRectangle()
 7.find the vertices of the rectangle
 8.find the vertices of the rectangle top-left anticlockwise order using center of mass approach
 9.find the height and width of the rectangle just to maintain the aspect ratio and do warpPerspective transformation.
Run Code Online (Sandbox Code Playgroud)

应用了所有这些步骤后,我可以轻松地从图像中获取文档或最大的矩形,但这在很大程度上取决于背景和文档表的强度差异.由于Canny边缘的工作原理是强度梯度,不同之处在于强度总是从实现方面假设.这就是为什么Canny将各种阈值参数考虑在内.

  1. 降低Thershold
  2. Heigher Thershold

因此,如果像素的强度梯度大于高阈值,则它将被添加为输出图像中的边缘像素.如果像素的强度梯度值低于下阈值,则像素将被完全拒绝.如果是像素在较低和较高阈值之间具有强度,如果它连接到具有大于较高阈值的值的任何其他像素,则它将仅被添加为边缘像素.

我的主要目的是使用Canny边缘检测进行文档扫描,因此我想知道如何动态计算这些阈值,以便它可以处理暗背景和浅背景两种情况.

我通过手动调整参数尝试了很多,但我找不到与场景关联的关系.

希望我明确我的观点,并提前致谢

opencv image-processing edge-detection image-segmentation

16
推荐指数
2
解决办法
2万
查看次数

如何从openCV android中的Byte []获取Mat对象?

我正在使用Android中的OpenCV库.我有一个实现的类PictureCallBack.

覆盖方法onPictureTaken()如下所示,

     @Override
public void onPictureTaken(byte[] data, Camera camera) {
    Log.i(TAG, "Saving a bitmap to file");
    // The camera preview was automatically stopped. Start it again.
    mCamera.startPreview();
    mCamera.setPreviewCallback(this);

    // Write the image in a file (in jpeg format)
    try {
        FileOutputStream fos = new FileOutputStream(mPictureFileName);
        fos.write(data);
        fos.close();

    } catch (java.io.IOException e) {
        Log.e("PictureDemo", "Exception in photoCallback", e);
    }
}
Run Code Online (Sandbox Code Playgroud)

因为我想要在图像处理中进一步使用图像数据而不是保存和重新加载图像.

从Byte数组中获取Mat对象的最有效方法是什么?我已经尝试过这些方法:

  1. 不知道图像发生了什么.

    Mat m=new Mat(); m.put(0,0,data);

  2. 转换为位图然后使用bitmapToMat() 在这种情况下,红色变为蓝色.

我在保存图像以备将来使用时也没有任何问题,但这导致了一个例外,因为当我使用以前存储的图像时,文件还没有生成.

java android opencv bitmap image-processing

12
推荐指数
2
解决办法
2万
查看次数

如何在openCV中找到Rect对象的角?

我在android平台上使用openCV库.我已成功检测到图像中最大的矩形,但由于我的应用程序将用于扫描目的,我还希望获得透视更改功能.

我知道,如何应用perspectiveTransform和warpPerspectiveTransform,但为此我将需要源点的矩形角.

考虑到我们拥有与Rect对象相关的第一个角(左上角)和宽度/高度的坐标这一事实似乎很容易找到角落,但问题是,对于旋转的矩形(通常的boundingRect但是不平行的边) ()),这些值是非常不同的.在这种情况下,它存储对应于另一个矩形的值,该矩形的边与轴平行并覆盖旋转的矩形,这使我无法检测实际矩形的角.

另外,我想对这两种算法进行比较,以便从图像中检测纸张.

  1. Canny edge - >最大轮廓 - >最大矩形 - >查找角落 - >透视变化

  2. Canny edge-> Hough lines - >线的交点 - >透视变化

如果我们有一个Rect对象,如何获得该矩形的所有角落,我想问的问题是什么?

提前致谢.

algorithm android opencv image-processing feature-detection

10
推荐指数
1
解决办法
1万
查看次数

clock()和MPI_Wtime()之间的区别

快速问题.对于我的代码的MPI实现,我两者都有很大的不同.我知道MPI_Wtime是每个处理器经过的实时时间,而clock()可以大致了解预期的时间.有人想添加一些断言吗?

c c++ processor clock mpi

6
推荐指数
1
解决办法
5740
查看次数

openMPI中的处理器/套接字关联?

我知道,openMPI实现中有一些基本功能,用于将不同进程映射到不同套接字的不同内核(如果系统有多个套接字).

  1. --bind-to-socket(先到先得)
  2. --bysocket(循环,基于负载量)
  3. --npersocket N(为每个套接字分配N个进程)
  4. --npersocket N --bysocket(为每个套接字分配N进程,但以循环方式)
  5. --bind-to-core(以顺序方式将一个进程绑定到每个核心)
  6. --bind-to-core --bysocket(为每个核心分配一个进程,但绝不会减少使用的任何套接字)
  7. --cpus-per-proc N(将进程绑定到多个核心)
  8. --rankfile(可以写出每个过程的偏好的完整描述)

我在具有8个套接字(每个10个核心)的服务器上运行我的openMPI程序,并且由于多线程处于打开状态,因此有160个核心可用.我需要通过在不同的套接字/内核和进程组合上运行openMPI程序来进行分析.我希望在使用所有套接字并且代码处理一些数据传输的情况下最慢,因为内存传输最快该进程正在同一个套接字的核心上执行.

So my questions are follows,
Run Code Online (Sandbox Code Playgroud)
  1. 进程和套接字之间的最差/最佳情况映射是什么(每个进程都有睡眠持续时间和数据传输到根进程)?

  2. 有没有办法打印正在执行进程的套接字名称和核心详细信息?(如果进程真的在套接字中分配,我将告诉我们它)

cpu processor core mpi openmpi

5
推荐指数
1
解决办法
7559
查看次数

如何编写不区分大小写的Lex模式规则?

我的文件结构是,

`pragma TOKEN1_NAME TOKEN1_VALUE
`pragma TOKEN2_NAME TOKEN2_VALUE
`pragma TOKEN3_NAME TOKEN3_VALUE
`pragma TOKEN4_NAME TOKEN4_VALUE
 TEXT{

 // A valid VHDL or verilog
 }
`pragma TOKEN2_NAME TOKEN2_VALUE
 TEXT{

   // VHDL or verilog
 }
Run Code Online (Sandbox Code Playgroud)

因为我正在处理Verilog和VHDL.我需要重新构建我的令牌名称,记住VHDL不区分大小写.我想对这两种情况使用单一解析器.同样的最有效方法是什么?flex是否支持某种功能以允许不区分大小写的模式匹配,如果文件的格式是Verilog,我们以后可以检查是否清除了令牌名称(包含所有小写字母)?

yacc lex verilog vhdl flex-lexer

1
推荐指数
1
解决办法
1960
查看次数