使用python实现在图片上画特定大小角度矩形框的方法

  介绍

小编给大家分享一下使用python实现在图片上画特定大小角度矩形框的方法,希望大家阅读完这篇文章之后都有所收获、下面让我们一起去探讨吧!

做图像识别的时候需要在图片中画出特定大小和角度的矩形框,自己写了一个函数,给定的输入是图片名称,矩形框的位置坐标,长宽和角度,直接输出画好矩形框的图片。

主要思想是先根据x, y坐标和长宽得到矩形,然后通过数学计算得到旋转角度角度后的新矩形框的四个顶点位置坐标,再利用draw.line()函数画出来。

import 数学      import  matplotlib.pyplot  as  plt   import  numpy  as  np   得到PIL  import 形象,ImageDraw         def 画(文件名,结果):   时间=img 才能;Image.open(文件名)   w h=img.size才能   时间=draw 才能;ImageDraw.Draw (img)   结果才能=np.array(结果)   x=结果才能[0][0]   ,,y=结果[0][1]   角才能结果[0]=[2]   高度才能结果[0]=[3]   宽度才能结果[0]=[4]      时间=anglePi 才能;角* math.pi/180.0   时间=cosA 才能;math.cos (anglePi)   sinA 才能=,sin (anglePi)      ,x1=x - 0.5 *宽度   ,日元=y - 0.5 *高度      ,x0=x + 0.5 *宽度   ,y0=日元      x1, x2=,y2=y + 0.5 *高度      x3=x0才能   ,y3 y2=x0n才能=,(x0  - x) * cosA  - (y0 安康;y) * sinA  + x   y0n 才能=,(x0-x) * sinA  +, (y0 安康;y) * cosA  + y      x1n才能=,(x1  - x) * cosA  - (y1 安康;y) * sinA  + x   y1n 才能=,(x1 x) * sinA  +, (y1 安康;y) * cosA  + y      x2n才能=,(x2  - x) * cosA  - (y2 安康;y) * sinA  + x   y2n 才能=,(x2-x) * sinA  +, (y2 安康;y) * cosA  + y      x3n才能=,(x3  - x) * cosA  - (y3 安康;y) * sinA  + x   y3n 才能=,(x3-x) * sinA  +, (y3 安康;y) * cosA  + y         draw.line才能([(x0n, y0n), (x1n, y1n)],,填补=(0,0,255))   draw.line才能([(x1n, y1n), (x2n, y2n)],,填补=(255,0,0))   draw.line才能([(x2n, y2n), (x3n, y3n)],填补=,(0,0255))   draw.line才能([(y0n x0n也),(x3n, y3n)],填补=(255,0,0))      plt.imshow才能(img)   plt.show才能()

改写成c++

由于c++程序也需要用到这个程序,改写一下

void  CopentestDlg: OnBnClickedAnaly ()   {   CString 才能;x, y,角,宽度;   float 才能xRaw [4],, yRaw [4];   float 才能xNew [4],, yNew [4];   float 才能;height =, 33;   if 才能;(imageCut==NULL), {   ,,,AfxMessageBox (_T(“未打开图片不能分析“));   ,,,返回;   ,,}   GetDlgItem才能(IDC_EX)→GetWindowText (x);   GetDlgItem才能(IDC_EY)→GetWindowText (y);   GetDlgItem才能(IDC_ANGLE)→GetWindowText(角);   GetDlgItem才能(IDC_WIDTH)→GetWindowText(宽度);   float 才能;xf =, _tstof (x),,//因为将字符串转成浮动类型   float 才能;yf =, _tstof (y);   float 才能;widthf=, _tstof(宽度);   float 才能;anglef=, _tstof(角);      xRaw才能[1],=,xf 作用;0.5 * widthf;   yRaw才能[1],=,yf 作用;0.5 *高度;      xRaw才能[0],=,xf  +, 0.5 * widthf;   yRaw才能[0],=,yRaw [1];      xRaw才能[2],=,xRaw [1];   yRaw才能[2],=,yf  +, 0.5 *高度;      xRaw才能[3],=,xRaw [0];   yRaw才能[3],=,yRaw [2];      float 才能;anglePi =, -anglef * pi /, 180.0;   float 才能;cosA =,因为(anglePi);   float 才能;sinA =,罪(anglePi);      xNew才能[0],=,(xRaw[0],安康;xf) * cosA 作用;(yRaw[0],安康;yf * sinA  +, xf;   yNew才能[0],=,(xRaw[0],安康;xf) * sinA  +, (yRaw[0],安康;yf * cosA  +, yf;      xNew才能[1],=,(xRaw[1],安康;xf) * cosA 作用;(yRaw[1],安康;yf * sinA  +, xf;   yNew才能[1],=,(xRaw[1],安康;xf) * sinA  +, (yRaw[1],安康;yf * cosA  +, yf;      xNew才能[2],=,(xRaw[2],安康;xf) * cosA 作用;(yRaw[2],安康;yf * sinA  +, xf;   yNew才能[2],=,(xRaw[2],安康;xf) * sinA  +, (yRaw[2],安康;yf * cosA  +, yf;      xNew才能[3],=,(xRaw[3],安康;xf) * cosA 作用;(yRaw[3],安康;yf * sinA  +, xf;   yNew才能[3],=,(xRaw[3],安康;xf) * sinA  +, (yRaw[3],安康;yf * cosA  +, yf;      cvLine才能(imageCut, cvPoint (xNew [0],, yNew [0]),, cvPoint (xNew [1],, yNew [1]),, cvScalar (0, 0, 255),, 3);   cvLine才能(imageCut, cvPoint (xNew [1],, yNew [1]),, cvPoint (xNew [2],, yNew [2]),, cvScalar (255, 0, 0),, 3);   null   null   null   null   null   null

使用python实现在图片上画特定大小角度矩形框的方法