前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python opencv 图像特效处理

Python opencv 图像特效处理

作者头像
用户9925864
发布2022-07-27 08:17:10
6330
发布2022-07-27 08:17:10
举报
文章被收录于专栏:算法工程师的学习日志

最近处理视觉相关的项目,分享一下通过opencv的图像特效处理,

原图镇楼


1、灰度处理

将cv2.imread()方法的第二参数设为0即可得到灰色图像。

代码语言:javascript
复制
import cv2
img0 = cv2.imread('1.jpg', 0)
img1 = cv2.imread('1.jpg', 1)
print(img0.shape)
print(img1.shape)
cv2.imshow('img0', img0)
cv2.waitKey(0)

通过cv2.cvtColor方法对图像进行灰度转换

cv2.cvtColor(src, code, dst, dstCN):

代码语言:javascript
复制
-src: 目标图像
-code: 颜色转换方式
-dst: 图像大小
-dstCN: 颜色通道大小
代码语言:javascript
复制
import cv2
img = cv2.imread('1.jpg', 1)
dat = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY )
cv2.imshow('dat', dat)
cv2.waitKey(0)

灰色图像的所有颜色通道的值相等,所以要想将彩色图像变为灰色图像,只需将他们颜色通道的值相等即可。

通过设置图片的颜色均值来使彩色图像变为灰色图像

代码语言:javascript
复制
import cv2
import numpy as np
img = cv2.imread('1.jpg', 1)
dat = np.zeros((img.shape[0], img.shape[1]), np.uint8)
for i in range(0, img.shape[0]):
    for j in range(0, img.shape[1]):
        (b, g, r) = img[i, j]
        gray = (int(b) + int(g) + int(r)) / 3
        dat[i, j] = np.uint(gray)
cv2.imshow('dat', dat)
cv2.waitKey(0)

2、颜色反转

将图像的颜色反转也就是让255减去当前的颜色值

代码语言:javascript
复制
import cv2
import numpy as np
img = cv2.imread('1.jpg', 1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
dat = np.zeros((img.shape[0], img.shape[1]), np.uint8)
for i in range(gray.shape[0]):
    for j in range(gray.shape[1]):
        dat[i, j] = 255 - gray[i, j]
cv2.imshow('dat', dat)
cv2.waitKey(0)

彩色图像的颜色反转也是一样的道理

代码语言:javascript
复制
import cv2
import numpy as np
img = cv2.imread('1.jpg', 1)

dat = np.zeros((img.shape[0], img.shape[1], img.shape[2]), np.uint8)
for i in range(img.shape[0]):
    for j in range(img.shape[1]):
        (b, g, r) = img[i, j]
        dat[i, j] = (255 - b, 255 - g, 255 - r)
cv2.imshow('src', img)
cv2.imshow('dat', dat)
cv2.waitKey(0)

3、马赛克

原理: 取一个指定大小的窗口,将该窗口填充为一个颜色

下面将窗口设置为10*10来生成一个马赛克图像

代码语言:javascript
复制
import cv2
img = cv2.imread('1.jpg', 1)
height = img.shape[0]
width = img.shape[1]
for m in range(100, 200):
for n in range(200, 300):
if m % 10 == 0 and n % 10 == 0:
for i in range(10):
    for j in range(10):
        (b, g, r) = img[m, n]
        img[m + i, n + j] = (b, g, r)
cv2.imshow('img', img)
cv2.waitKey(0)

4、毛玻璃效果

原理: 将当前的像素颜色随机设置为窗口中的一个颜色

这里设置窗口为8*8来生成一个毛玻璃图像

代码语言:javascript
复制
import cv2
import random
import numpy as np
img = cv2.imread('1.jpg', 1)
height = img.shape[0]
width = img.shape[1]
dat = np.zeros(img.shape, np.uint8)
for m in range(height - 8):
    for n in range(width - 8):
        index = int(random.random() * 8)
        (b, g, r) = img[m + index, n + index]
        dat[m, n] = (b, g, r)
cv2.imshow('dat', dat)
cv2.waitKey(0)

5、图像融合

图片乘以比例系数相加得到俩张图片的融合效果,公式如下

代码语言:javascript
复制
target = src1 * a +src2 * (1 - a)
cv2.addWeighted(src1, alpha, src2, beta, gamma):
代码语言:javascript
复制
import cv2
import numpy as np
img1 = cv2.imread('1.jpg', 1)
img2 = cv2.imread("2.jpg", 1)
img3 = cv2.resize(img2, (img1.shape[1], img1.shape[0]), interpolation=cv2.INTER_AREA)
dat = np.zeros(img1.shape, np.uint8)
dat = cv2.addWeighted(img1, 0.8, img3, 0.2, 0)

cv2.imshow('dat', dat)
cv2.waitKey(0)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法工程师的学习日志 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档