基于圆形坐标裁剪图像时区域错位问题求助(附OpenCV代码)
问题:OpenCV矩形绘制与图像裁剪区域未对齐
尝试基于圆形坐标裁剪图像,初始实现代码如下:
startx = circle[0] starty = circle[1] radius = circle[2] recImage = cv2.rectangle(image,(startx-radius,starty-radius), (startx+radius,starty+radius), (0,0,255),2) miniImage = recImage[startx-radius:startx+radius,starty-radius:starty+radius]
其中circle[0]、circle[1]为圆心的x、y坐标,circle[2]为半径。预期recImage绘制的矩形与miniImage裁剪的区域对齐,但实际二者并未重合。
原因分析
OpenCV中存在坐标顺序差异:
cv2.rectangle函数接收的坐标参数为**(x, y)**(列在前,行在后,对应图像水平、垂直方向)- 图像数组的索引顺序为**[行(y), 列(x)]**(垂直方向在前,水平方向在后)
两者顺序不匹配,导致裁剪区域和绘制矩形错位。
解决方法
调整裁剪时的数组索引顺序,将y轴(行)范围放在前面,x轴(列)范围放在后面:
startx = circle[0] starty = circle[1] radius = circle[2] # 矩形绘制逻辑保持不变,参数为(x,y) recImage = cv2.rectangle(image,(startx-radius,starty-radius), (startx+radius,starty+radius), (0,0,255),2) # 裁剪改为 [y起始:y结束, x起始:x结束] miniImage = recImage[starty-radius:starty+radius, startx-radius:startx+radius]
修改后,裁剪区域会与绘制的红色矩形完全重合,因为此时裁剪的行范围对应矩形的y轴范围,列范围对应矩形的x轴范围,坐标逻辑统一。
内容的提问来源于stack exchange,提问作者Dun
相关产品推荐
相关产品推荐

