图像识别基础认识
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import cv2
%matplotlib inline
读取图像
img = cv2.imread('shuzi.png')
# 显示图像
cv2.imshow('shuzi', img)
# 设置窗口大小
#cv2.resizeWindow('shuzi', 800, 600) # 设置宽为800,高为600
cv2.waitKey(0) # 等待按键
cv2.destroyAllWindows() # 关闭窗口
01 设置感兴趣区域-选择图像的某一部分进行进一步处理
def roi(img,x,y,weight,height):
roi = img[y:y+height,x:x+weight]
return roi
x,y,w,h = 100, 100, 200, 200 #取图像左上角点
roi = roi(img,x,y,w,h)
cv2.imshow('roi',roi)
cv2.waitKey(0)
cv2.destroyAllWindows()
02 边界填充
cv2.copyMakeBorder() 函数进行边界填充。这个函数允许你在图像的四周添加边框,边框可以是不同的颜色或样式。
cv2.copyMakeBorder(img, top, bottom, left, right, border_type, value=value)
cv2.BORDER_CONSTANT(使用常量值填充边界)/cv2.BORDER_REPLICATE(用边缘的像素值填充边界)/cv2.BORDER_REFLECT(边界填充采用反射的方式)/cv2.BORDER_REFLECT_101(反射区域不包括边缘像素)/cv2.BORDER_WRAP(采用环绕方式填充边界)/cv2.BORDER_TRANSPARENT(用于透明图像的边界填充)
img1 = cv2.imread('dog.jpg')
padding_constant = cv2.copyMakeBorder(img1,50,50,50,50,borderType=cv2.BORDER_CONSTANT,value=(200, 255,65) )
padding_replicate = cv2.copyMakeBorder(img1,50,50,50,50,borderType=cv2.BORDER_REPLICATE)
padding_reflect = cv2.copyMakeBorder(img1,50,50,50,50,borderType=cv2.BORDER_REFLECT)
padding_reflect_101 = cv2.copyMakeBorder(img1,50,50,50,50,borderType=cv2.BORDER_REFLECT_101 )
padding_wrap = cv2.copyMakeBorder(img1,50,50,50,50,borderType=cv2.BORDER_WRAP )
combined_image1 = np.hstack((padding_constant, padding_replicate, padding_reflect))
cv2.imshow('padding_img',combined_image1)
cv2.waitKey(0)
cv2.destroyAllWindows()
combined_image2 = np.hstack((padding_constant, padding_reflect_101, padding_wrap))
cv2.imshow('padding_img2',combined_image2)
cv2.waitKey(0)
cv2.destroyAllWindows()
03 数值计算
cv2.add(加法),cv2.subtract(减法)-加可能导致饱和(超过255)会截断到255。减可能会变为负值(会被截断为0),这通常是背景减除的效果。
addWeighted(img1, alpha, img2, beta, 0)其中0为偏移量
import cv2
import numpy as np
img1 = cv2.imread('dog.jpg')
img2 = cv2.imread('color.png')
img1 = cv2.resize(img1,(500, 500))
img2 = cv2.resize(img2,(500, 500))
#图像加法
add_img = cv2.add(img1,img2)
zong1 = np.hstack((img1,img2,add_img))
cv2.imshow('zong1',zong1)
cv2.waitKey(0)
cv2.destroyAllWindows()
#图像减法
sub_image = cv2.subtract(img1, img2)
zong2 = np.hstack((img1,img2,sub_image))
cv2.imshow('zong2',zong2)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 图像加权融合
alpha = 0.5 # 权重
beta = 1.0 - alpha
weighted_image = cv2.addWeighted(img1, alpha, img2, beta, 0)
zong3= np.hstack((img1,img2,weighted_image))
cv2.imshow('zong3',zong3)
cv2.waitKey(0)
cv2.destroyAllWindows()
04 图像阈值 -将图像转换为二值图像或减少图像的灰度级数
阈值化的基本思路是:如果像素值大于阈值,则将其设置为最大值(通常是255,表示白色)。如果像素值小于或等于阈值,则将其设置为0(表示黑色)。
常见阈值化方法:全局阈值、自适应阈值、多阈值
常用阈值化类型:cv2.THRESH_BINARY(大于阈值则为255,否则为0)、cv2.THRESH_BINARY_INV(小于阈值则为255,否则为0)、cv2.THRESH_TRUNC(大于阈值的像素值被截断为阈值。)、cv2.THRESH_TOZERO(小于阈值的像素值设置为0,大于阈值的值保持不变。)、cv2.THRESH_TOZERO_INV(大于阈值的像素值设置为0,小于阈值的值保持不变。)
import cv2
import numpy as np
img = cv2.imread('dog.jpg')
threshold_value=180
# 全局阈值化
_, binary_image1 = cv2.threshold(img, threshold_value, 255, cv2.THRESH_BINARY)
zong1= np.hstack((img,binary_image1))
cv2.imshow('zong1',zong1)
cv2.waitKey(0)
cv2.destroyAllWindows()
_, binary_image2 = cv2.threshold(img, threshold_value, 255, cv2.THRESH_BINARY_INV)
zong2= np.hstack((img,binary_image2))
cv2.imshow('zong2',zong2)
cv2.waitKey(0)
cv2.destroyAllWindows(
原文地址:https://blog.csdn.net/weixin_53731307/article/details/143448379
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!