Opencv基础-创新互联

视频图片操作

井陉ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!

import cv2 as cv #导入opencv包

cv.imread(path,flags) #加载图片,其中第一个参数是绝对或者相对路径,第二个参数为0时加载灰度图像,为1时加载彩图像。

cv.imshow(path,flags) #显示图片,其中第一个参数是显示窗口的名称,第二个参数是打开的图片

cv.imwrite(name,flags)#保存图片,第一个参数是途径,第二个参数是要保存的图片 返回boolean

cv2.namedWindow 创建一个窗体,只需指定窗体名称

cv2.namedWindow()初始化默认标签是cv2.WINDOW_AUTOSIZE。

但是如果把标签改成cv2.WINDOW_NORMAL就可以自由的调整窗体大小,

当图像维度太大,这将很有帮助。

cv2.destroyWindow() 销毁指定窗体

cv2.destroyAllWindows() 销毁所有窗体

视频

cap = cv.VideoCapture(0)打开本地摄像头

cap = cv.VideoCapture(videoPath)读取本地视频

import cv2 as cv

cap = cv.VideoCapture(0)

while cap.isOpened():

status, frame = cap.read()

k = cv.waitKey(25)

# 图片灰度化

frame = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)

cv.imshow('video', frame)

cv.destroyWindow('video')

方法

cv.shape打印形状

cv.size打印像素点个数

cv.ndim打印维度

cv.dtype打印数据类型

cv.waitkey(0) 无限期的等待键盘按下

cv.destroyWindow(name)#销毁所有窗体,参数是需要销毁窗体的名称

cv.destroyAllWindows()#销毁所有窗体

绘图

圆:cv.circle(画板,圆心,半径,颜色,粗细,cv.LINE_AA(抗锯齿))

线条:cv.line(画板,起点,终点,颜色,粗细)

椭圆:cv.ellipse(画板,圆心,(长轴,短轴),逆时针旋转的角度,椭圆弧沿顺时针起始角度,结束角度,颜色,抗锯齿)

多边形:`使用函数cv2.polylines在一副图像中绘制多边形示例代码

函数原型:polylines(img, pts, isClosed, color[, thickness[, lineType[, shift]]]) -> img

img:要绘制的那张图像

pts:多边形的顶点列表

isClosed:默认为True表示闭合, False表示不闭合

绘制多边形:

使用函数cv2.polylines在一副图像中绘制多边形示例代码

函数原型:polylines(img, pts, isClosed, color[, thickness[, lineType[, shift]]]) -> img

img:要绘制的那张图像

pts:多边形的顶点列表

isClosed:默认为True表示闭合, False表示不闭合

color:线段的颜色,传一个元组,如红色(0,0,255),如果是灰度图请传入灰度值

thickness:线段的粗细,默认值-1,表示填充

lineType:线段类型:默认8连线,cv2.LINE_AA表示抗锯齿

more help:help(cv2.polylines)`

绘制矩形:

使用函数cv2.rectangle()在一副图像中绘制矩形示例代码

函数原型:rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) -> img

img:要绘制的那张图像

pt1:矩形的左上角坐标,如(0, 0)

pt2:矩形右下角坐标, 如(499, 499)

color:线段的颜色,传一个元组,如红色(0,0,255), 如果是灰度图请传入灰度值

thickness:线段的粗细,默认值-1,表示填充

lineType:线段类型:默认8连线,cv2.LINE_AA表示抗锯齿

more help:help(cv2.rectangle)

绘制文字:

使用函数cv2.putText()在一副图像中绘制文字

函数原型:putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]]) -> img

img:要绘制的那张图像

text:要绘制的文本

org:绘制的位置坐标

fontFace:字体格式

fontScale:字体大小

color:线段的颜色,传一个元组,如红色(0,0,255),如果是灰度图请传入灰度值

thickness:线段的粗细,默认值-1,表示填充

lineType:线段类型:默认8连线,cv2.LINE_AA表示抗锯齿

bottomLeftOrigin 如果为True则图像位于原点的左下角

more help:help(cv2.putText)

图片操作

仿射变换:

matScale = np.float32([[0.5,0,0],[0,0.5,0]])

dst = cv.warpAffine(img,matScale,(width,height))

RGB通道拆分:b, g, r = cv.split(img)

RGB通道合并:img1 = cv.merge((B, g, r))

图片缩放:cv.resize(原图,(heigth,width))

图片剪切:

img = cv.imread('cat.jpg',1)

dst = img[100:200,100:300] #起点(100,100)终点(200,200)

cv.imshow('dst',dst)

cv.waitKey(0)

图片移位:

matShift = np.float32([[1,0,100],[0,1,200]])

dst = cv.warpAffine(img,matShift,(height,width))

cv.imshow('dst',dst)

图片仿射变换:

matsrc = np.float32([[0,0],[0,height],[width,0]]) #原图点位

matdst = np.float32([[50,50],[100,height-100],[width-100,50]]) #目标点位

matAffine = cv.getAffineTransform(matsrc,matdst) #仿射变换

dst = cv.warpAffine(img,matAffine,(width,height))

图片旋转:

matRotate = cv.getRotationMatrix2D((height*0.5,width*0.5),45,0.5)# 参数(中心点,旋转角度,缩放系数)RotationMatrix2D旋转矩阵方法

dst = cv.warpAffine(img,matRotate,(width,height))#放射变化

图片特效

灰度处理:

#方法一:

img0 = cv.imread('cat.jpg',0) #灰度图片

img1 = cv.imread('cat.jpg',1)#彩图

#方法二:

img = cv.imread('cat.jpg',1)

dst = cv.cvtColor(img,cv.COLOR_BGR2GRAY)

#方法三:

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]

gray = (int(b)+int(g)+int(r))/3

dst[i,j] = gray

print(np.uint(gray))

#方法四

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.229+g*0.587+r*0.114

dst[i,j] = np.uint(gray)

图片边缘检测:

#1.灰度图像处理

gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)

#2.高斯滤波

imgG = cv.GaussianBlur(gray,(3,3),0)

#3.卷积

dst = cv.Canny(img,100,100)

绘图

import numpy as np

import matplotlib.pyplot as plt

x = np.array([1,2,3,4,5,6,7,8])

y = np.array([3,5,7,6,2,6,10,15])

plt.plot(x,y,'r',lw = 10) #折线图

plt.bar(x,y,0.5,alpha = 1,color = 'b') #原主图

plt.show()

图片腐蚀:

腐蚀操作:

原理:

如果卷积核对应的原图像的所有像素值都是1,那么中心像素点就保持原来的值,

否则变为0。所以前景物体会变小,整幅图像的白色区域会减少。

erode(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]) -> dst

参数解析:郑州人流医院 http://www.zzzzyy120.com/

element:腐蚀操作的内核。 如果不指定,默认为一个简单的 3x3 矩阵。

否则,我们就要明确指定它的形状,可以使用函数getStructuringElement()。

anchor:默认为Point(-1,-1),内核中心点。省略时为默认值。

iterations:腐蚀次数。省略时为默认值1。

borderType:推断边缘类型,具体参见borderInterpolate函数。默认为BORDER_DEFAULT,省略时为默认值。

borderValue:边缘值,具体可参见createMorphoogyFilter函数。可省略。

作用:

腐蚀对于去除白噪声很有用,也可以用来断开两个连接在一个的物体

代码示例:

kernel = np.ones((5, 5), np.float32)

erosion = cv.erode(img, kernel, iterations=1)

膨胀操作:

膨胀操作:

原理:

与腐蚀相反,与卷积核对应的原始图像的像素值中只要有一个是1,

中心像素的值就是1,所以膨胀操作增加白色区域(前景)。

dilate(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]) -> dst

参数解析:

anchor:默认为Point(-1,-1),内核中心点。省略时为默认值。

iterations:膨胀次数。省略时为默认值1。

borderType:推断边缘类型,具体参见borderInterpolate函数。默认为BORDER_DEFAULT,省略时为默认值。

borderValue:边缘值,具体可参见createMorphoogyFilter函数。可省略。

作用:

一般在去除图像噪声时可以先腐蚀然后在膨胀,

这样噪声就已经被去除了,不会再回来,但前景会增加。

膨胀也可以用连接两个分开的物体。

代码示例:

kernel = np.ones((5, 5), np.float32)

dilate = cv.dilate(img, kernel, iterations=1)

简单阈值:

全局阈值:

def threshold_dem0(image):

gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)

ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY | cv.THRESH_OTSU)

print("阈值",ret)

cv.imshow('binary',binary)

ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY | cv.THRESH_OTSU)

ret = 阈值,binary = 阈值图像

参数(灰度图像,阈值,255,阈值算法)

局部阈值:

def local_threshold(image):

gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)

binary = cv.adaptiveThreshold(gray,255,cv.ADAPTIVE_THRESH_GAUSSIAN_C,cv.THRESH_BINARY,25,10)

cv.imshow('biary',binary)

binary = cv.adaptiveThreshold(gray,255,cv.ADAPTIVE_THRESH_MEAN_C,cv.THRESH_BINARY,25,10)

自定义阈值:

def load_threshold(image):

gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)

h,w = gray.shape[:2]

men = np.reshape(gray,[1,w*h])

men1 = men.sum()/(w*h) #所有像素的均值

are,binary = cv.threshold(gray,men1,255,cv.THRESH_BINARY)

cv.imshow('biary',binary)

开操作和闭操作:

开运算:先腐蚀后膨胀, 去除噪声,去除白色小点、空洞

闭运算:先膨胀后腐蚀, 用来填充前景物体的小黑点

形态学梯度:膨胀减去腐蚀, 可以得到前景物体的轮廓

礼帽:原图减去开运算

黑帽:闭运算减去原图

使用函数morphologyEx()进行形态学其他操作

函数原型为:morphologyEx(src, op, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]) -> dst

op参数:

cv.MORPH_OPEN:开运算

cv.MORPH_CLOSE:闭运算

cv.MORPH_GRADIENT:形态学梯度

cv.MORPH_TOPHAT:礼帽

cv.MORPH_BLACKHAT:黑帽

def open_dem0(image):# 开操作

print(image.shape)

gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)

ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY_INV | cv.THRESH_OTSU)#阈值化

cv.imshow('binary',binary)

kernel = cv.getStructuringElement(cv.MORPH_ELLIPSE,(3,3)#结构元素

binarya = cv.morphologyEx(binary,cv.THRESH_TRUNC ,kernel) #形态学操作

cv.imshow('binary2',binarya)

def close_dem0(image):#闭操作

print(image.shape)

gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)

ret,binay = cv.threshold(gray,0,255,cv.THRESH_BINARY | cv.THRESH_OTSU) #阈值化

cv.imshow('binay',binay)

kernel = cv.getStructuringElement(cv.MORPH_RECT,(15,15)) #结构元素

binay = cv.morphologyEx(binay,cv.MORPH_CLOSE,kernel) #形态学操作

cv.imshow('binay',binay)

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

新闻名称:Opencv基础-创新互联
分享网址:https://www.cdcxhl.com/article4/csoooe.html

成都网站建设公司_创新互联,为您提供小程序开发企业建站网页设计公司网站排名做网站微信小程序

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

小程序开发