2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 计算机视觉:图片的边缘检测 映射和油画效果

计算机视觉:图片的边缘检测 映射和油画效果

时间:2024-05-12 15:21:19

相关推荐

计算机视觉:图片的边缘检测 映射和油画效果

1.图片的边缘检测

1.1 调用cv2 api方法

import cv2img = cv2.imread(filename='../anqila21.jpg',flags=1)imgInfo = img.shapeheight = imgInfo[0]width = imgInfo[1]gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # 灰度处理imgG = cv2.GaussianBlur(gray,(3,3),0) # 高斯滤波,第二个参数为模板大小dst = cv2.Canny(imgG,50,50)cv2.imshow('dst',dst)cv2.waitKey(0)

1.2 算法实现

现在我们使用算法实现,并且把它的背景颜色改为白色,线条颜色改为黑色,为了让效果更加明了,换一张大一点的图片。

import cv2import numpy as npimport math# 算法实现img = cv2.imread(filename='../../anqila.jpg',flags=1)imgInfo = img.shapeheight = imgInfo[0]width = imgInfo[1]gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # 灰度处理dst = np.zeros((height,width,1),np.uint8)'''sobel[ 1 2 1 [ 1 0 -10 0 0 2 0 -2-1 -2 -1] 1 0 -1]'''for i in range(height-2):for j in range(width-2):gy = gray[i,j]*1+gray[i,j+1]*2+gray[i,j+2]*1-gray[i+2,j]*1-gray[i+2,j+1]*2-gray[i+2,j+2]*1gx = gray[i,j]*1-gray[i,j+2]*1+gray[i+1,j]*2-gray[i+1,j+2]*2+gray[i+2,j]*1-gray[i+2,j+2]*1grad = math.sqrt(gx**2+gy**2)if grad >50:dst[i,j] = 0else:dst[i,j] = 255cv2.imshow('dst',dst)cv2.waitKey(0)

2. 图片的映射

import cv2import numpy as npimg = cv2.imread(filename='../anqila21.jpg',flags=1)imgInfo = img.shapeheight = imgInfo[0]width = imgInfo[1]# b = b*1.5# g = g*1.3dst = np.zeros((height,width,3),np.uint8)for i in range(height):for j in range(width):(b,g,r) = img[i,j]b = b*1.5g = g*1.3if b>255:b = 255if g>255:g = 255dst[i,j]=(b,g,r)cv2.imshow('dst',dst)cv2.waitKey(0)

是不是觉得有点像电影里面的效果了呢?

3. 图片的油画效果

import cv2import numpy as npimg = cv2.imread(filename='../anqila21.jpg',flags=1)imgInfo = img.shapeheight = imgInfo[0]width = imgInfo[1]# graygray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # 转换成灰度图片dst = np.zeros((height,width,3),np.uint8)flag = 2 # 参数,这个参数越小,油画效果与真实图片比较逼真for i in range(flag,height-flag):for j in range(flag,width-flag):array1 = np.zeros(8,np.uint8) # 灰度等级for m in range(-1*flag,flag):for n in range(-1*flag,flag):p1 = int(gray[i+m,j+n]/32) # p1 0~3array1[p1]+=1currentMax = array1[0]l = 0for k in range(1,8):if currentMax<array1[k]:currentMax = array1[k]l = kfor m in range(-1 * flag, flag):for n in range(-1 * flag, flag):if (l * 32) <= gray[i + m, j + n] <= ((l + 1) * 32):(b,g,r) = img[i+m,j+n]dst[i,j] = (b,g,r)cv2.imshow('dst',dst)cv2.waitKey(0)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。