二、Opencv代数运算
参考来源:【youcans的OpenCV例程200篇】
import cv2
import numpy as np
import random
import matplotlib.pyplot as plt
path = "D:/2Codefield/VS_code/python/Learn_Base/openCV/DATA/"
lenasrc = "Lena/"
baboonsrc = "Baboon/"
logosrc = "Logo/"
color_img1 = cv2.imread(path + lenasrc + "color.png", flags=1)
gray_img1 = cv2.imread(path + lenasrc + "color.png", flags=0)
color_img2 = cv2.imread(path + baboonsrc + "color.png", flags=1)
gray_img2 = cv2.imread(path + baboonsrc + "color.png", flags=0)
color_img3 = cv2.imread(path + logosrc + "color.png", flags=1)
color_img3_small = cv2.imread(path + logosrc + "color128.png", flags=1)
imgAddCV = cv2.add(color_img1, color_img2)
imgAddNP = color_img1 + color_img2
plt.subplot(221), plt.title("1. img1"), plt.axis('off')
plt.imshow(cv2.cvtColor(color_img1, cv2.COLOR_BGR2RGB))
plt.subplot(222), plt.title("2. img2"), plt.axis('off')
plt.imshow(cv2.cvtColor(color_img2, cv2.COLOR_BGR2RGB))
plt.subplot(223), plt.title("3. cv2.add(img1, img2)"), plt.axis('off')
plt.imshow(cv2.cvtColor(imgAddCV, cv2.COLOR_BGR2RGB))
plt.subplot(224), plt.title("4. img1 + img2"), plt.axis('off')
plt.imshow(cv2.cvtColor(imgAddNP, cv2.COLOR_BGR2RGB))
plt.show()
Value = 100
Scalar = np.ones((1, 3), dtype="float") * Value
imgAddV = cv2.add(color_img1, Value)
imgAddS = cv2.add(color_img1, Scalar)
print("Shape of scalar", Scalar)
for i in range(1, 6):
x, y = i*10, i*10
print("(x,y)={},{}, color_img1:{}, imgAddV:{}, imgAddS:{}"
.format(x,y,color_img1[x,y],imgAddV[x,y],imgAddS[x,y]))
plt.subplot(131), plt.title("1. img1"), plt.axis('off')
plt.imshow(cv2.cvtColor(color_img1, cv2.COLOR_BGR2RGB))
plt.subplot(132), plt.title("2. img + constant"), plt.axis('off')
plt.imshow(cv2.cvtColor(imgAddV, cv2.COLOR_BGR2RGB))
plt.subplot(133), plt.title("3. img + scalar"), plt.axis('off')
plt.imshow(cv2.cvtColor(imgAddS, cv2.COLOR_BGR2RGB))
plt.show()
imgAddW1 = cv2.addWeighted(color_img1, 0.2, color_img2, 0.8, 0)
imgAddW2 = cv2.addWeighted(color_img1, 0.5, color_img2, 0.5, 0)
imgAddW3 = cv2.addWeighted(color_img1, 0.8, color_img2, 0.2, 0)
plt.subplot(131), plt.title("1. a=0.2, b=0.8"), plt.axis('off')
plt.imshow(cv2.cvtColor(imgAddW1, cv2.COLOR_BGR2RGB))
plt.subplot(132), plt.title("2. a=0.5, b=0.5"), plt.axis('off')
plt.imshow(cv2.cvtColor(imgAddW2, cv2.COLOR_BGR2RGB))
plt.subplot(133), plt.title("3. a=0.8, b=0.2"), plt.axis('off')
plt.imshow(cv2.cvtColor(imgAddW3, cv2.COLOR_BGR2RGB))
plt.show()
x,y = 300,50
W1, H1 = color_img1.shape[1::-1]
W2, H2 = color_img3_small.shape[1::-1]
if (x + W2) > W1: x = W1 - W2
if (y + H2) > H1: y = H1 - H2
imgCrop = color_img1[y:y + H2, x:x + W2]
imgAdd = cv2.add(imgCrop, color_img3_small)
imgAddW = cv2.addWeighted(imgCrop, 0.2, color_img3_small, 0.8, 0)
imgAddM = np.array(color_img1)
imgAddM[y:y + H2, x:x + W2] = imgAddW
cv2.imshow("imgAdd", imgAdd)
cv2.imshow("imgAddW", imgAddW)
cv2.imshow("imgAddM", imgAddM)
cv2.waitKey(0)
Mask = np.zeros((color_img1.shape[0], color_img1.shape[1]), dtype=np.uint8)
xmin, ymin, w, h = 180, 190, 200, 200
Mask[ymin:ymin+h, xmin:xmin+w] = 255
print(color_img1.shape, color_img2.shape, Mask.shape)
imgAddMask1 = cv2.add(color_img1, color_img2, mask=Mask)
imgAddMask2 = cv2.add(color_img1, np.zeros(np.shape(color_img1), dtype=np.uint8), mask=Mask)
cv2.imshow("MaskImage", Mask)
cv2.imshow("MaskAdd", imgAddMask1)
cv2.imshow("MaskROI", imgAddMask2)
key = cv2.waitKey(0)
Mask1 = np.zeros((color_img1.shape[0], color_img1.shape[1]), dtype=np.uint8)
Mask2 = Mask1.copy()
cv2.circle(Mask1, (285, 285), 110, (255, 255, 255), -1)
cv2.ellipse(Mask2, (285, 285), (100, 150), 0, 0, 360, 255, -1)
imgAddMask1 = cv2.add(color_img1, np.zeros(np.shape(color_img1), dtype=np.uint8), mask=Mask1)
imgAddMask2 = cv2.add(color_img1, np.zeros(np.shape(color_img1), dtype=np.uint8), mask=Mask2)
cv2.imshow("circularMask", Mask1)
cv2.imshow("circularROI", imgAddMask1)
cv2.imshow("ellipseROI", imgAddMask2)
key = cv2.waitKey(0)
imgAnd = cv2.bitwise_and(color_img1, color_img2)
imgOr = cv2.bitwise_or(color_img1, color_img2)
imgNot = cv2.bitwise_not(color_img1)
imgXor = cv2.bitwise_xor(color_img1, color_img2)
plt.figure(figsize=(9,6))
titleList = ["color_img1", "color_img2", "and", "or", "not", "xor"]
imageList = [color_img1, color_img2, imgAnd, imgOr, imgNot, imgXor]
for i in range(6):
plt.subplot(2,3,i+1), plt.title(titleList[i]), plt.axis('off')
plt.imshow(cv2.cvtColor(imageList[i], cv2.COLOR_BGR2RGB), 'gray')
plt.show()
x, y = (0, 10)
W1, H1 = color_img1.shape[1::-1]
W2, H2 = color_img3_small.shape[1::-1]
if (x + W2) > W1: x = W1 - W2
if (y + H2) > H1: y = H1 - H2
print(W1,H1,W2,H2,x,y)
imgROI = color_img1[x:x+W2, y:y+H2]
img3Gray = cv2.cvtColor(color_img3_small, cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img3Gray, 200, 255, cv2.THRESH_BINARY)
maskInv = cv2.bitwise_not(mask)
img1Bg = cv2.bitwise_and(imgROI, imgROI, mask=mask)
img2Fg = cv2.bitwise_and(color_img3_small, color_img3_small, mask=maskInv)
imgROIAdd = cv2.add(img1Bg, img2Fg)
imgAdd = color_img1.copy()
imgAdd[x:x+W2, y:y+H2] = imgROIAdd
plt.figure(figsize=(9,6))
titleList = ["1. imgGray", "2. imgMask", "3. MaskInv", "4. img2FG", "5. img1BG", "6. imgROIAdd"]
imageList = [img3Gray, mask, maskInv, img2Fg, img1Bg, imgROIAdd]
for i in range(6):
plt.subplot(2,3,i+1), plt.title(titleList[i]), plt.axis('off')
if (imageList[i].ndim==3):
plt.imshow(cv2.cvtColor(imageList[i], cv2.COLOR_BGR2RGB))
else:
plt.imshow(imageList[i], 'gray')
plt.show()
cv2.imshow("imgAdd", imgAdd)
key = cv2.waitKey(0)
text = "OpenCV, xxayt"
fontList = [cv2.FONT_HERSHEY_SIMPLEX,
cv2.FONT_HERSHEY_SIMPLEX,
cv2.FONT_HERSHEY_PLAIN,
cv2.FONT_HERSHEY_DUPLEX,
cv2.FONT_HERSHEY_COMPLEX,
cv2.FONT_HERSHEY_TRIPLEX,
cv2.FONT_HERSHEY_COMPLEX_SMALL,
cv2.FONT_HERSHEY_SCRIPT_SIMPLEX,
cv2.FONT_HERSHEY_SCRIPT_COMPLEX,
cv2.FONT_ITALIC]
fontScale = 1
color = (255, 255, 255)
for i in range(10):
pos = (10, 50*(i+1))
imgPutText = cv2.putText(color_img1, text, pos, fontList[i], fontScale, color)
cv2.imshow("imgPutText", imgPutText)
key = cv2.waitKey(0)
ge(10):
pos = (10, 50*(i+1))
imgPutText = cv2.putText(color_img1, text, pos, fontList[i], fontScale, color)
cv2.imshow("imgPutText", imgPutText)
key = cv2.waitKey(0)