4) 如何调整图像大小?
4.1. 缩小图像有时我们会得到高分辨率的图像,因此对此类图像执行任何操作都非常困难,因为它会占用更多空间并影响性能。在这种情况下,我们将调整图像的大小和缩放比例以避免此类问题。cv.resize() 首选的插值方法是 cv.INTER_AREA ,用于缩小原始图像。下面提到的是我们可以用来调整图像、视频和实时视频大小的功能。def FrameResize(frame,scale):
Height=int(frame.shape[0]*scale)
Width=int(frame.shape[1]*scale)
Dimension=(Height,Width)
return cv.resize(frame,Dimension,interpolation = cv.INTER_AREA)
现在,我们将尝试将图像大小调整 50%。img=cv.imread("/content/drive/MyDrive/Colab Notebooks/Opencv/fiona-smallwood-iUxjs-F0voI-unsplash-min.jpg")
print("Shape of the image before resizing :",img.shape,"")
cv2_imshow(img)
print(" Image post Resizing ")
img_resize=FrameResize(img,0.50)
cv2_imshow(img_resize)
上述代码的输出是:原图:
调整大小后:
4.2. 放大图像:上面我们已经看到了图像的缩小。现在我们将专注于图像的放大。我们将使用 cv.INTER_CUBIC & cv.INTER_LINEAR 进行放大。cv.INTER_CUBIC 比 cv.INTER_LINEAR 慢,但cv.INTER_CUBIC 的输出比 cv.INTER_LINEAR 好。默认情况下,插值方法 cv.INTER_LINEAR 用于所有调整大小的目的。Resized=cv.resize(original_img,(700,850),interpolation=cv.INTER_LINEAR)
cv2_imshow(Resized)
上述代码的输出是:
4.3. 视频大小调整现在我们将查看视频的大小调整。Vid=cv.VideoCapture("/content/drive/MyDrive/Colab Notebooks/Pexels Videos 2716.mp4")
while True:
isTrue,Frame= Vid.read()
New_Frame=FrameResize(Frame,0.50)
cv2_imshow(New_Frame)
if cv.waitKey(20) & 0xFF==ord('d'):
break
Vid.release()
cv.destroyAllWindows()
上述代码的输出是:
下面提到的是另一个功能,在实时视频的情况下很有帮助。def ChangeRes(Width,Height):
Vid.set(3,Width)
Vid.set(4,Height)
return Vid
5) 如何在图片中添加形状和文字?
在这里,我们将尝试添加不同的形状,如矩形、圆形,并尝试形状的厚度。
5.1. 在图像中添加矩形下面提到的是这里的代码,我们将 original_img 作为我们将在其上绘制矩形的输入图像。矩形的起始像素点是(200,200),一直到(300,300)。而颜色是 B=200,G=100 和 R=150。查看下面提到的代码及其输出original_img=cv.imread("/content/drive/MyDrive/Colab Notebooks/Opencv/19mxv41g9rh61(1).jpg")
cv.rectangle(original_img,(200,200),(300,300),(200,100,150),thickness=2)
cv2_imshow(original_img)
上述代码的输出:
5.2. 添加具有颜色填充的矩形下面提到的是这里的代码,我们将 original_img 作为我们将在其上绘制矩形的输入图像。矩形的起始像素点是(0,0),它一直到图像的中心。而颜色是 B=200,G=155 和 R=40。这里我们采用了thickness=-1,所以整个矩形都被颜色填充。cv.rectangle(original_img,(0,0),(original_img.shape[1]//2,original_img.shape[0]//2),(200,155,40),thickness=-1)
cv2_imshow(original_img)
上述代码的输出:
5.3. 添加具有颜色填充的圆形下面提到的是这里的代码,我们将 original_img 作为我们将在其上绘制圆圈的输入图像。圆的中心像素点为(450,450),圆的半径为40。而颜色为B=25,G=0,R=100。这里我们采用了thickness=-1,所以整个圆圈都被颜色填充。cv.circle(original_img,(450,450),40,(25,0,100),thickness=-1)
cv2_imshow(original_img)
上述代码的输出:
5.4. 在图像中添加线下面提到的是这里的代码,我们将 original_img 作为我们将在其上绘制矩形的输入图像。线的起始像素点为 (300,300),线的终点像素为 (500,500)。cv.line(original_img,(300,300),(500,500),255,thickness=2)
cv2_imshow(original_img)
上述代码的输出:
5.5. 在图像中添加文本在这里,我们将通过使用cv.putText()方法为空白图像添加文字,在这里我们输入文字,像素位置,我们还可以选择字体类型,如字体FONT_HERSHEY_SIMPLEX,FONT_HERSHEY_PLAIN等等,字体比例、颜色、粗细。我们也可以使用下面的代码中提到的 numpy 创建空白图像。blank=np.ones((500,500,3),dtype='uint8')
cv.putText(blank,'Green light',(blank.shape[0]//2,blank.shape[1]//2),cv.FONT_HERSHEY_COMPLEX,1,(0,255,0),thickness=3)
cv2_imshow(blank)
上述代码的输出:
6) 如何裁剪图像?
我们可以使用下面提到的代码轻松裁剪图像的特定部分。这里你只需要指定你要裁剪的像素。cv2_imshow(original_img)
Crop_img=original_img[200:350,325:450]
cv2_imshow(Crop_img)
上述代码的输出:原图:
从图像中裁剪部分:
7) 如何旋转或移动图像?
如果我们想移动图像,请查看下面的函数,这对于相同的功能非常有用:def rotate(img,angle,center=None):
w,h=img.shape[:2]
if center==None:
center=(w//2,h//2)
#center is the center of image from which we have to rotate if it is None then it is cconsider as the center of the original image.
rotMat=cv.getRotationMatrix2D(center,angle,1.0)
dim=(w,h)
return cv.warpAffine(img,rotMat,dim)
在这里,我们尝试使用上述函数来旋转图像。Rotated_img=rotate(original_img,45,(60,60))
cv2_imshow(Rotated_img)
上述代码的输出:
现在,我们将尝试旋转上面已经旋转的图像。
从上面的输出我们知道,如果我们尝试旋转已经旋转的图像,那么在早期图像中不可见的图像部分也会在当前输出图像中丢失。此外,我们可以颠倒图像。查看下面提到的代码及其输出。flip_img=cv.flip(original_img,-1)
cv2_imshow(flip_img)
上述代码的输出:
总结
如果你到目前为止已经阅读了该博客,那么你必须熟悉 OpenCV。OpenCV 的其余主题将在下一篇博客中介绍。查看下一篇博客的链接,我们将重点介绍 OpenCV 的一些高级内容。