opencv图像处理基本算法

opencv基础功能

一.提取单通道颜色
1.首先是opencv的ROI功能,就是只取图像一部分通道的颜色。我们知道所有的图片都是由三原色(红,绿,蓝)这三个通道构成的,如果我们只想要一个颜色通道的效果的话怎么办,接下来就是我要说的。
在这之前首先要会图像分割,代码如下:

img_dog=cv2.imread("F:\\6.26\\dog.jpg")
as=img[0:200,0:200]
cv_show("as",F:\\6.26\\dog.jpg)

其中的地址是你这张图片的绝对地址,第二行就是你截取图片的一个代码表达式,我们也可以通过改变里面的数值来截取不同大小的图片。
下面进行颜色通道提取:

import cv2
import matplotlib.pyplot as plt
import numpy as np
img=cv2.imread('F:\\6.26\\cat.jpg')
b,g,r=cv2.split(img)
print(b.shape)

这里是输出了蓝色通道的shape值,和以前图片不一样的是这里的shape值是两个值,而正常的图片是三个值,第三个值是通道的数量,而当只显示一个通道的shape值时,这里的第三个值也就为1,默认就不显示了,所以这里就只会两个数值,依次类推,我们就可以得到其他通道的照片了。
二.边界填充
首先边界填充上下左右均需要进行填充。然后我们需要定义上下左右填充的大小。

top,bottom,left,right=(50,50,50,50)

我这里定义填充的大小均为50,当然每个方向的填充不一定都得一样。
定义了填充的大小,接下来就是填充的方法。
填充的方法都一样,都是用的cv2.copyMakeBorder表达式,我们就可以按照字面意思来理解就是先复制一下,然后填充。

reflect=cv2.copyMakeBorder(img,top,bottom,left,right,borderType=cv2.BORDER_REFLECT)

上面我写的这个是映射法,就是把原来图像最边缘的部分进行反射,反射到需要填充的区域内。
上面这个表达式后面的参数分别是:
img为你传入电脑的图片,接下来的四个参数为你上下左右填充的数值大小,
最后面就是你所选择的填充的种类。
三.数值计算
opencv中的数值计算分为直接在后面进行加上相应的数值即可。如下:

img2=img+10

这就是把它对应的每个像素点都加上了10。
当然你也可以两张图片进行相加,但前提是要保证这两张图片的shape值相同才可以。
resize函数可以改变图片的shape值。

img=cv2.resize(img,(800,500))
img3=img1+img2

这样得到的img3照片就是img1和Img2两张照片的叠加态。
1-Sobel算子
这个用文字将的话比较困难,这个Sobel算子数用来计算图片的梯度是等于多少,是用来检测图片中主体与主体之间的缝隙和边缘,当然用来进行检测缝隙梯度也需要有上下左右四个参数。
opencv图像处理基本算法_第1张图片
Gx为检测到的左右参数,Gy为检测到的上下参数。
opencv图像处理基本算法_第2张图片
Gx为P3-P1,2P6-2P4,P9-P7,就是左右进行运算,因为P1前面是负号,所以这里是减法。
和上面一样Gy就是上下相减。

dst=cv2.Sobel(src,depth,dx,dy,ksize)

上式就是Sobel算子来进行梯度运算,用来检测图片中主体与主体中间的边缘缝隙。
括号里的参数分别是:
src为图片,depth为图像的一个深度(通常情况下深度的值为-1),dx为水平方向,dy为数值方向,ksize为Sobel算子的大小。
因为像素的限定范围是(0-255),所以当作减法操作时得到负数,系统默认为0。

你可能感兴趣的:(opencv,图像处理,算法)