一、灰度处理

(1) imread (src,0)

#imread
import cv2
img0 = cv2.imread('canton.jpg',0)
img1 = cv2.imread('canton.jpg',1)
print(img0.shape)
print(img1.shape)
cv2.imshow('src',img0)
cv2.imshow('src',img1)
cv2.waitKey(0)
复制代码

(2)cvtColor ()

将图像从一个颜色空间转换为另一个颜色空间。

该功能将输入图像从一个颜色空间转换为另一个颜色空间。如果要转换RGB颜色空间,则应明确指定通道的顺序(RGB或BGR)。请注意,OpenCV中的默认颜色格式通常被称为RGB,但它实际上是BGR(字节相反)。因此,标准(24位)彩色图像中的第一个字节将是一个8位蓝色分量,第二个字节将是绿色,第三个字节将是红色。第四,第五和第六个字节将成为第二个像素(蓝色,然后是绿色,然后是红色),依此类推

cv::cvtColor()支持多种颜色空间之间的转换,其支持的转换类型和转换码如下:

1、RGB和BGR(opencv默认的彩色图像的颜色空间是BGR)颜色空间的转换

cv::COLOR_BGR2RGB cv::COLOR_RGB2BGR cv::COLOR_RGBA2BGRA cv::COLOR_BGRA2RGBA

2、向RGB和BGR图像中增添alpha通道

cv::COLOR_RGB2RGBA cv::COLOR_BGR2BGRA

3、从RGB和BGR图像中去除alpha通道

cv::COLOR_RGBA2RGB cv::COLOR_BGRA2BGR

4、从RBG和BGR颜色空间转换到灰度空间

cv::COLOR_RGB2GRAY cv::COLOR_BGR2GRAY

cv::COLOR_RGBA2GRAY

cv::COLOR_BGRA2GRAY

5、从灰度空间转换到RGB和BGR颜色空间

cv::COLOR_GRAY2RGB cv::COLOR_GRAY2BGR

cv::COLOR_GRAY2RGBA cv::COLOR_GRAY2BGRA

6、RGB和BGR颜色空间与BGR565颜色空间之间的转换

cv::COLOR_RGB2BGR565 cv::COLOR_BGR2BGR565 cv::COLOR_BGR5652RGB cv::COLOR_BGR5652BGR cv::COLOR_RGBA2BGR565 cv::COLOR_BGRA2BGR565 cv::COLOR_BGR5652RGBA cv::COLOR_BGR5652BGRA

7、灰度空间域BGR565之间的转换

cv::COLOR_GRAY2BGR555 cv::COLOR_BGR5552GRAY

8、RGB和BGR颜色空间与CIE XYZ之间的转换

cv::COLOR_RGB2XYZ cv::COLOR_BGR2XYZ cv::COLOR_XYZ2RGB cv::COLOR_XYZ2BGR

9、RGB和BGR颜色空间与uma色度(YCrCb空间)之间的转换

cv::COLOR_RGB2YCrCb cv::COLOR_BGR2YCrCb cv::COLOR_YCrCb2RGB cv::COLOR_YCrCb2BGR

10、RGB和BGR颜色空间与HSV颜色空间之间的相互转换

cv::COLOR_RGB2HSV

cv::COLOR_BGR2HSV

cv::COLOR_HSV2RGB

cv::COLOR_HSV2BGR

11、RGB和BGR颜色空间与HLS颜色空间之间的相互转换

cv::COLOR_RGB2HLS cv::COLOR_BGR2HLS cv::COLOR_HLS2RGB cv::COLOR_HLS2BGR

12、RGB和BGR颜色空间与CIE Lab颜色空间之间的相互转换

cv::COLOR_RGB2Lab cv::COLOR_BGR2Lab cv::COLOR_Lab2RGB cv::COLOR_Lab2BGR

13、RGB和BGR颜色空间与CIE Luv颜色空间之间的相互转换

cv::COLOR_RGB2Luv cv::COLOR_BGR2Luv cv::COLOR_Luv2RGB cv::COLOR_Luv2BGR

14、Bayer格式(raw data)向RGB或BGR颜色空间的转换

cv::COLOR_BayerBG2RGB

cv::COLOR_BayerGB2RGB

cv::COLOR_BayerRG2RGB

cv::COLOR_BayerGR2RGB

cv::COLOR_BayerBG2BGR

cv::COLOR_BayerGB2BGR

cv::COLOR_BayerRG2BGR

cv::COLOR_BayerGR2BGR

cvtColor(

  • InputArray 输入图像:8位无符号,16位无符号(CV_16UC ...)或单精度浮点。,
  • OutputArray 输出与src相同大小和深度的图像。,
  • INT 颜色空间转换代码,
  • INT 目标图像中的通道数量; 如果参数为0,则通道的数量自动从src和代码中导出。 )
import cv2
img = cv2.imread('canton.jpg',1)
dst = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('dst',dst)
cv2.waitKey(0)
复制代码

(3)np.uint8()

import cv2
import numpy as np
img = cv2.imread('canton.jpg',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
dst = np.zeros((height,width,3),np.uint8)
for i in range(0,height):for j in range(0,width):(b,g,r) = img[i,j]b = int(b)g = int(g)r = int(r)gray = r*0.2+g*0.5+b*0.2dst[i,j] = np.uint8(gray)
cv2.imshow('dst',dst)
cv2.waitKey(0)
复制代码

结果:

二、颜色翻转

(1)灰色图片颜色翻转

import cv2
import numpy as np
img = cv2.imread('canton.jpg',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
dst = np.zeros((height,width,1),np.uint8)
for i in range(0,height):for j in range(0,width):grayPixel = gray[i,j]dst[i,j] = 255-grayPixel
cv2.imshow('dst',dst)
cv2.waitKey(0)
复制代码

结果:

(2)彩色图片颜色翻转

import cv2
import numpy as np
img = cv2.imread('canton.jpg',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
dst = np.zeros((height,width,3),np.uint8)
for i in range(0,height):for j in range(0,width):(b,g,r) = img[i,j]dst[i,j] = (255-b,255-g,255-r)
cv2.imshow('dst',dst)
cv2.waitKey(0)
复制代码

结果:

三、马赛克效果

import cv2
import numpy as np
img = cv2.imread('cantontower.jpg',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
for m in range(0,600):for n in range(300,600):# pixel ->10*10if m%10 == 0 and n%10==0:for i in range(0,10):for j in range(0,10):(b,g,r) = img[m,n]img[i+m,j+n] = (b,g,r)
cv2.imshow('dst',img)
cv2.waitKey(0)
复制代码

结果:

四、毛玻璃效果

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

结果:

五、图片融合

(1)addWeighted()

cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])

  • 参数
  • src1 图片1链接
  • alpha 是src1透明度
  • src2 图片2链接
  • beta 是src2透明度
  • gamma 一个加到权重总和上的标量值,dst = src1 * alpha + src2 * beta + gamma;
  • dtype 输出阵列的可选深度,有默认值-1。;当两个输入数组具有相同的深度时,这个参数设置为-1(默认值),即等同于src1.depth()
import cv2
import numpy as np
img0 = cv2.imread('cantontower.jpg',1)
img1 = cv2.imread('qilou.jpg',1)
imgInfo = img0.shape
height = imgInfo[0]
width = imgInfo[1]roiH = int(height/2)
roiW = int(width/2)
img0ROI = img0[0:roiH,0:roiW]
img1ROI = img1[0:roiH,0:roiW]dst = np.zeros((roiH,roiW,3),np.uint8)
dst = cv2.addWeighted(img0ROI,0.5,img1ROI,0.5,0)
# dst = src1 * alpha + src2 * beta + gamma;cv2.imshow('dst',dst)
cv2.waitKey(0)
复制代码

结果:

六、边缘检测

(1)GaussianBlur()

GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT)

参数

  • src,输入图像,即源图像,填Mat类的对象即可。它可以是单独的任意通道数的图片,但需要注意,图片深度应该为CV_8U,CV_16U, CV_16S, CV_32F 以及 CV_64F之一。
  • dst,即目标图像,需要和源图片有一样的尺寸和类型。比如可以用Mat::Clone,以源图片为模板,来初始化得到如假包换的目标图。
  • ksize,高斯内核的大小。其中ksize.width和ksize.height可以不同,但他们都必须为正数和奇数(并不能理解)。或者,它们可以是零的,它们都是由sigma计算而来。
  • sigmaX,表示高斯核函数在X方向的的标准偏差。
  • sigmaY,表示高斯核函数在Y方向的的标准偏差。若sigmaY为零,就将它设为sigmaX,如果sigmaX和sigmaY都是0,那么就由ksize.width和ksize.height计算出来。为了结果的正确性着想,最好是把第三个参数Size,第四个参数sigmaX和第五个参数sigmaY全部指定到。
  • borderType,用于推断图像外部像素的某种边界模式。注意它有默认值BORDER_DEFAULT。

(2)Canny()

Canny(InputArray image,OutputArray edges,double threshold1,double threshold2,int apertureSize = 3,bool L2gradient = false )

参数

  • image 输入8位图像.
  • edges 输出边缘图; 单通道8位图像,其大小与图像相同。
  • threshold1 滞后程序的第一阈值。
  • threshold2 滞后程序的第二阈值。
  • apertureSize Sobel算子的光圈大小。
  • L2gradient 一个标志,表明是否有更准确的 L2 norm =(dI/dx)2+(dI/dy)2,还是默认的 L1 norm =|dI/dx|+|dI/dy| 就行 ( L2gradient=false )
import cv2
import numpy as np
import random
img = cv2.imread('cantontower.jpg',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
cv2.imshow('src',img)gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
imgG = cv2.GaussianBlur(gray,(3,3),0)
dst = cv2.Canny(img,50,50)
cv2.imshow('dst',dst)
cv2.waitKey(0)
复制代码

结果:

(3)边缘检测原理

边缘是图像中灰度发生急剧变化的区域边界。图像灰度的变化情况可以用图像灰度分布的梯度来表示,数字图像中求导是利用差分近似微分来进行的,实际上常用空域微分算子通过卷积来完成

Sobel算子是高斯平滑与微分操作的结合体。所以其抗噪能力非常强,用途较多。一般的sobel算子包含x与y两个方向,算子模板为:

在opencv函数中,还能够设置卷积核(ksize)的大小,假设ksize=-1,就演变为3*3的Scharr算子,模板无非变了个数字:

import cv2
import numpy as np
import random
import math
img = cv2.imread('cantontower.jpg',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
cv2.imshow('src',img)gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
dst = np.zeros((height,width,1),np.uint8)
for i in range(0,height-2):for j in range(0,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+2,j]*1-gray[i,j+1]*2+gray[i+2,j+1]*2-gray[i,j+2]*1+gray[i+2,j+2]*1grad = math.sqrt(gx*gx+gy*gy)if grad>50:dst[i,j] = 255else:dst[i,j] = 0
cv2.imshow('dst',dst)
cv2.waitKey(0)
复制代码

七、浮雕功能

import cv2
import numpy as np
img = cv2.imread('image0.jpg',1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# newP = gray0-gray1+150
dst = np.zeros((height,width,1),np.uint8)
for i in range(0,height):for j in range(0,width-1):grayP0 = int(gray[i,j])grayP1 = int(gray[i,j+1])newP = grayP0-grayP1+150if newP > 255:newP = 255if newP < 0:newP = 0dst[i,j] = newP
cv2.imshow('dst',dst)
cv2.waitKey(0)
复制代码

结果:

七、颜色风格

import cv2
import numpy as np
img = cv2.imread('cantontower.jpg',1)
cv2.imshow('src',img)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]dst = np.zeros((height,width,3),np.uint8)
for i in range(0,height):for j in range(0,width):(b,g,r) = img[i,j]b = b*1.5g = g*1.3r = rif b>255:b = 255if g>255:g = 255if r>255:r = 255dst[i,j]=(b,g,r)
cv2.imshow('dst',dst)
cv2.waitKey(0)
复制代码

结果:

八、油画特效

import cv2
import numpy as np
img = cv2.imread('image00.jpg',1)
cv2.imshow('src',img)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
dst = np.zeros((height,width,3),np.uint8)
for i in range(4,height-4):for j in range(4,width-4):array1 = np.zeros(8,np.uint8)for m in range(-4,4):for n in range(-4,4):p1 = int(gray[i+m,j+n]/32)array1[p1] = array1[p1]+1currentMax = array1[0]l = 0for k in range(0,8):if currentMax<array1[k]:currentMax = array1[k]l = kfor m in range(-4,4):for n in range(-4,4):if gray[i+m,j+n]>=(l*32) and 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)
复制代码

结果:

计算机视觉—图像特效(3)相关推荐

  1. Python 计算机视觉(补充版)—— 图像特效中的油画效果

    在前面的文章 Python 计算机视觉(十五)-- 图像特效处理 中我已经介绍了大部分的图像的特效处理,但还是忽略了油画特效的处理,在本篇文章中简单介绍一下油画特效的基本原理以及代码实现,感兴趣的小伙 ...

  2. 计算机视觉加强之图像特效与线段文字绘制

    一.图像特效介绍 1.灰度处理:彩色图片灰度化 对于彩色图片有三个颜色通道:RGB 对于灰度图片如果也是三个颜色通道,则RGB值是相等的 2.底板效果(灰度) 彩色底板是通过当前RGB取反得到的 3. ...

  3. Python 计算机视觉(十五)—— 图像特效处理

    参考的一些文章以及论文我都会给大家分享出来 -- 链接就贴在原文,论文我上传到资源中去,大家可以免费下载学习,如果当天资源区找不到论文,那就等等,可能正在审核,审核完后就可以下载了.大家一起学习,一起 ...

  4. Python计算机视觉——图像到图像的映射

    Python计算机视觉--图像到图像的映射 文章目录 Python计算机视觉--图像到图像的映射 写在前面 1 单应性变换 1.1 直接线性变换算法 1.2 仿射变换 2 图像扭曲 2.1 图像中的图 ...

  5. CV:计算机视觉技术之图像基础知识(二)—以python的skimage和numpy库来了解计算机视觉图像基础(图像存储原理-模糊核-锐化核-边缘检测核,进阶卷积神经网络(CNN)的必备基础)

    CV:计算机视觉技术之图像基础知识(二)-以python的skimage和numpy库来了解计算机视觉图像基础(图像存储原理-模糊核-锐化核-边缘检测核,进阶卷积神经网络(CNN)的必备基础) 目录 ...

  6. CV:计算机视觉技术之图像基础知识—以python的cv2库来了解计算机视觉图像基础

    CV:计算机视觉技术之图像基础知识-以python的cv2库来了解计算机视觉图像基础 目录 一.图像中的傅里叶变换 1.时域和频域 2.傅里叶变换 3.图像中的傅里叶变换

  7. CV:计算机视觉技术之图像基础知识(一)—以python的cv2库来了解计算机视觉图像基础(傅里叶变换-频域-时域/各种滤波器-线性-非线性-均值-中值-高斯-双边)

    CV:计算机视觉技术之图像基础知识(一)-以python的cv2库来了解计算机视觉图像基础(傅里叶变换-频域-时域/各种滤波器-线性-非线性-均值-中值-高斯-双边) 目录 一.图像中的傅里叶变换 1 ...

  8. Dataset:数据集集合(CV方向数据集)-常见的计算机视觉图像数据集大集合包括表面缺陷检测数据集(持续更新)

    Dataset:数据集集合(CV方向数据集)-常见的计算机视觉图像数据集大集合包括表面缺陷检测数据集(建议收藏,持续更新) 目录 CV常用数据集平台集合 Mendeley Data CAISA-Web ...

  9. [Python图像处理] 二十五.图像特效处理之素描、怀旧、光照、流年以及滤镜特效

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

最新文章

  1. 图解 wp WordPress 文章 链接 在新窗口打开
  2. 8_用opencv调用深度学习框架tenorflow、Pytorch、Torch、caffe训练好的模型(20190212)
  3. TensorFlow 资源汇集
  4. 在asp.net2.0中使用存储过程
  5. php5.5 pdo mysql_PHP5中使用PDO连接数据库的方法
  6. 最好用的WIN7 系统下载
  7. kotlin基本语法--kotlin官网文档学习
  8. hp probook fn_如何在HP ProBook(或兼容笔记本电脑)上安装Mac OS X Lion
  9. 高感 动态范围和宽容度的关系
  10. x协议转换器能代替串口服务器,HighTek HU-04-USB-RS485/422 转换器-HighTek RS485转换器|USB转换器|串口服务器|多串口卡|集线器|信号隔离器|光纤收发器...
  11. 如何在 Spring Boot 优雅关闭加入一些自定义机制
  12. Flink启动报错could not be determined automatically
  13. C++构造类函数计算长方体体积
  14. 2021.1山科马原大题
  15. linux中的lo介绍及作用(回环接口 回环IP)
  16. 随机密码生成工具类(java)
  17. 2021年全球乙酸正丁酯收入大约1783.2百万美元,预计2028年达到2216.7百万美元
  18. 性能测试+当当网搭建
  19. Java取得:月初,月末
  20. 使用CAD看图软件将图片导出CAD的步骤

热门文章

  1. 那些年移动互联网行业曾经走过的弯路
  2. saltstack 任务管理和集群(三)
  3. 220v转5v阻容降压电路
  4. 新客户上云 –虚拟机及相关服务常见问题集锦
  5. EBB-4、忘记root密码;文件,目录权限
  6. MySQL备份与恢复————用LVM快照恢复
  7. 如何在K8S上玩转TensorFlow ?
  8. 安卓学习随笔 -- 自定义标题栏
  9. 泛型的基本用法和代码演示
  10. spark SortShuffleWriter的实现