美文网首页
Opencv第六课--图像的运算

Opencv第六课--图像的运算

作者: 计算机视觉__掉队选手 | 来源:发表于2019-04-02 17:15 被阅读0次

数字图像的运算

图像处理中最重要的内容之一就是图像的运算,图像像素的运算包括点运算、代数运算、逻辑运算,图像的几何变换方法包括平移、镜像、缩放、转置、旋转和剪切,图像的邻域操作和区域选择。

获取和修改

import cv2
import numpy as np
img = cv2.imread("test.jpg")
#可以通过像素点读取
px = img[100,100]
#返回的是一个RGB的三维向量

上面的例子是对一副输入图像的像素值进行读取,下面通过接口快速实现对像素值的修改

import cv2
import numpy as np
img = cv2.imread("test.jpg")
print(img.item(10,10,2))
img.itemset((10,10,2),100)
print(img.item(10,10,2))

当然经常需要访问图像的一些属性,包括行、列,大小,类型

import cv2
img = cv2.imread("test.jpg")
print(img.shape)
##(280,450,3)
print(img.size)
##12600
print(img.dtype)
##uint8

图像加法

cv2.add()是将两幅图像进行加法运算

图像混合

image.png

cv2.addWeighted()就是按照这个公式进行混合操作的,实现不同比例的一种图像混合。

import cv2
import numpy as np
img1 = cv2.imread("test1.jpg")
img2 = cv2.imread("test2.jpg")
dst = cv2.addWeighted(img1,0.7,img2,0.3,0)
cv2.imshow("dst",dst)
cv2.waitKey(0)
cv2.destroyAllWindow()

几何变换

扩展缩放

cv2.resize()可以实现这个功能

import numpy as np
import cv2
img = cv2.imread("test.jpg")
res = cv2.resize(img,None,fx=2,fy=2,interpolation=cv2.INTER_CUBIC)
cv2.imshow("res",res)
cv2.imshow("img",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

平移

import cv2
import numpy as np
img = cv2.imread("test.jpg")
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
mode = imgInfo[2]
dst  = np.zeros(imgInfo,np.uint8)
for i in range(height):
  for j in range(width-100):
      dst[i,j+100] = img[i,j]
cv2.imshow("dst",dst)
cv2.imshow("img",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
image.png

原始图像向右移动100个像素

旋转

def rotation():
    img = cv2.imread("test.jpg",0)
    rows,cols = img.shape
    #第一个是旋转中心,第二个是旋转角度,第三个是旋转缩放因子
    M = cv2.getRotationMatrix2D((cols/2,rows/2),45,0.6)
    dst = cv2.warpAffine(img,M,(2*cols,2*rows))
    while(1):
        cv2.imshow("dst",dst)
        cv2.imshow("img",img)
        if cv2.waitKey(1)&0xFF==27:
            break
    cv2.destroyAllWindows()
if __name__ == "__main__":
    rotation()

仿射变换

def warpAffine():
    img = cv2.imread("test.jpg")
    imgInfo = img.shape
    height = imgInfo[0]
    width = imgInfo[1]
    #原图的三个坐标
    matSrc = np.float32([[0,0],[0,height-1],[width-1,0]])
    #仿射图的三个坐标
    matDst = np.float32([[50,50],[100,height-50],[width-200,100]])
    matAffine = cv2.getAffineTransform(matSrc,matDst)
    dst = cv2.warpAffine(img,matAffine,(height,width))
    cv2.imshow("dst",dst)
    while(1):
        if cv2.waitKey(1)&0xFF==27:
            break
    cv2.destroyAllWindows()
    
if __name__ == "__main__":
    warpAffine()

相关文章

网友评论

      本文标题:Opencv第六课--图像的运算

      本文链接:https://www.haomeiwen.com/subject/pvugbqtx.html