注: 这篇文章用的OpenCV版本是3.4.0
在机器视觉领域,经常会遇到圆环形的场景,比如零部件、瓶口等等
对于这类圆环形的场景,许多传统的视觉处理算法难以应用,比如滤波器、卷积核这种见方的工具
因此,用OpenCV实现了如下的圆环区域展开成矩形长条的方法
Mat CircleToRectangle(const Mat & circle, const Point & Center, int Radius, int RingStride)
{
Mat rectangle;
rectangle = Mat::zeros(Size(Radius * CV_PI * 2, RingStride), CV_8UC1);
int nl = rectangle.rows; // number of lines
int nc = rectangle.cols * rectangle.channels(); // total number of elements per line
for (int j = 0; j < nl; j++) {
// get the address of row j
uchar* data = rectangle.ptr<uchar>(j);
for (int i = 0; i < nc; i++) {
// process each pixel ---------------------
double theta = CV_PI * 2.0 / float(nc) * float(i + 1);
double rho = Radius - j - 1; //-1防止超界
int position_x = (float)Center.x + rho * (float)st