Skip to content

Latest commit

 

History

History
163 lines (126 loc) · 3.44 KB

626-2065764-图像的按位逻辑运算.sy.md

File metadata and controls

163 lines (126 loc) · 3.44 KB
show version enable_checker
step
1.0
true

opencv

回忆

  • 上次研究了 两个矩阵的加法
运算法 溢出处理
直接+法 溢出后 取模
add加法 溢出后 等于255
  • BGR 三个通道混合的时候
    • 用的就是 加色混色法
  • 除了 加减运算之外
    • 图像 还有什么 运算方式吗?🤔

按位与操作

import numpy as np                                                            
import cv2    
img = cv2.imread("/mnt/cgshare/kun1.png")
print(img.shape)              
mask = np.zeros((305,483,3),np.uint8)
mask[75:118,:,:] = 255
mask[:,214:255,:] = 255
final = cv2.bitwise_and(img,mask)
cv2.imshow("img",img) 
cv2.imshow("mask",mask) 
cv2.imshow("final",final) 
cv2.waitKey()             
cv2.destroyAllWindows()
  • 效果

图片描述

按位或操作

import numpy as np    
import cv2            
                      
img = cv2.imread("/mnt/cgshare/kun1.png")
print(img.shape)      
mask = np.zeros((305,483,3),np.uint8)
mask[75:118,:,:] = 255
mask[:,214:255,:] = 255
final = cv2.bitwise_or(img,mask)                                              
cv2.imshow("img",img) 
cv2.imshow("mask",mask)
cv2.imshow("final",final)
cv2.waitKey()         
cv2.destroyAllWindows()
  • 效果

图片描述

按位异或操作

import numpy as np                                                          
import cv2    
 
img = cv2.imread("kun1.png")
print(img.shape)              
mask = np.zeros((305,483,3),np.uint8)        
mask[75:118,:,:] = 255
mask[:,214:255,:] = 255
final = cv2.bitwise_xor(img,mask)
cv2.imshow("img",img) 
cv2.imshow("mask",mask) 
cv2.imshow("final",final) 
cv2.waitKey()             
cv2.destroyAllWindows()
  • 按位 异或
    • 与黑色异或得到本身
    • 与白色异或得到反相底片

图片描述

换一个蒙版

#coding:utf-8
import cv2
import numpy as np

#读取图片
img = cv2.imread("lena.png", cv2.IMREAD_GRAYSCALE)

#获取图像宽和高
rows, cols = img.shape[:2]
print(rows, cols)

#画圆形
circle = np.zeros((rows, cols), dtype="uint8")
cv2.circle(circle, (int(rows/2), int(cols/2)), 80, 255, -1)
print(circle.shape)
print(img.size, circle.size)

#OpenCV图像异或运算
result = cv2.bitwise_xor(img, circle)

#显示图像
cv2.imshow("original", img)
cv2.imshow("circle", circle)
cv2.imshow("result", result)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
  • 效果

图片描述

  • 还有什么运算符吗?

按位取反操作

import numpy as np
import cv2
 
img = cv2.imread("kun1.png")
print(img.shape)
mask = np.zeros((305,483,3),np.uint8)
final = cv2.bitwise_not(img)
cv2.imshow("img",img)
cv2.imshow("final",final)                                                     
cv2.waitKey()
cv2.destroyAllWindows()
  • 反相效果

图片描述

总结 🤔

  • 这次研究了 两个矩阵的加法
运算法 溢出处理
直接+法 溢出后 取模
add加法 溢出后 等于255
  • BGR 三个通道混合的时候
    • 用的就是 加色混色法
  • 除了 加减运算之外
    • 图像 还有什么 运算方式吗?🤔
  • 下次再说👋