我是靠谱客的博主 怕孤独帽子,最近开发中收集的这篇文章主要介绍【Opencv】计算机视觉中opencv的常见操作像素点的赋值图像的切片操作基本的绘制操作仿射变换的相关操作:平移,缩放,旋转,剪切加减运算位操作及遮罩色彩通道的分离和融合操作颜色直方图平滑及模糊边缘检测,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

opencv的常见操作

  • 像素点的赋值
  • 图像的切片操作
  • 基本的绘制操作
  • 仿射变换的相关操作:平移,缩放,旋转,剪切
  • 加减运算
  • 位操作及遮罩
  • 色彩通道的分离和融合操作
  • 颜色直方图
  • 平滑及模糊
  • 边缘检测

像素点的赋值

这里对于灰度图像:
image[10, 10](255, 255, 0)

图像的切片操作

patch1=image[0:100, 0:100]
cv2.imshow(“patch1”, patch1)

基本的绘制操作

#这里用随机值画一个圆
import cv2
import numpy as np
canvas=np.zeros((300,300,3),dtype="unit8")
#返回一个随机int:
radius=np.numpy.randint(5,200)
color=np.random.randint(0,256,size=(3,)).tolist()
pt=np.random.randint(0,200,size=(2,))
#用生成的随机值画圆,包含圆的中心点,半径,圆的颜色
cv2.circle(canvas,tuple(pt),radius,color,-1)

仿射变换的相关操作:平移,缩放,旋转,剪切

M=np.float32([[1,0,25],[0,1,50]])
#平移
shifted_image=cv2.warpffine(image,M,image.shape[0],image.shape[1])

#以某点为圆心,进行图片的旋转
(h,w)=image.shape[:2]
#这里使用了地板除//,在除以2以后向下取整
center=(w//2,h//2)
#旋转135度,图片不缩放(1.0)
M=cv2.getRotationMatrix2D(center,135,1.0)
cv2.warpffine(image,M,image.shape[0],image.shape[1])

#缩放,在缩小时直接丢弃某些值,在放大时,在相邻两像素间进行插值填充,默认的插值填充方法是
#双线性插值使用邻近两点的平均值为新生成区域的像素值对于OpenCV而言,官方建议缩小使用cv2.INTER_AREA,放大使用cv2.INTER_LINEAR
import cv2
src = cv2.imread('D:/cv2.png', cv2.IMREAD_UNCHANGED)
#percent by which the image is resized
scale_percent = 50
#calculate the 50 percent of original dimensions
width = int(src.shape[1] * scale_percent / 100)
height = int(src.shape[0] * scale_percent / 100)
dsize = (width, height)
output = cv2.resize(src, dsize)

#翻转:其中第二个参数0表示水平翻转,1表示垂直翻转,-1表示水平加垂直翻转
flipped_image=cv2.flip(image,1) 

#裁剪:裁剪就是numpy中的切片操作
cropped_image=image[x1:x2,y1:y2]

加减运算

#cv2中的加减运算与numpy中不同,cv2要求加减运算结果在0至255之间,超出范围则截断:
x,y=unit8([100]),unit8([200])
cv2.add(x,y)#结果为255
cv2.substract(x,y)//结果为0

位操作及遮罩

也就是像素级别的布尔运算,经过bool运算的两mat大小应该相同

cv2.bitwise_and
cv2.bitwise_or
cv2.bitwise_xor #异或,两个像素值不同,结果为1
cv2.bitwise_not

#遮罩区域,在位操作的基础上,提取感兴趣的操作:其中mask为1的部分被显示,0被隐藏
image=cv2.bitwise_and(image,mask=mask)

色彩通道的分离和融合操作

import numpy as np
import cv2
(B,G,R)=cv2.split(image)
merged=cv2.merge([B,G,R])

#颜色空间的转换:
#颜色空间转换主要使用cv2.cvtColor函数,第一个参数为需要进行转换的图像对象,第二个为颜色空间转#换形式,常用的有cv2.COLOR_BGR2GRAY、cv2.COLOR_ BGR2HSV
cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

颜色直方图

#颜色直方图是图片中像素点的分布,通过统计,可以直观地用曲线表达出哪些像素值多,哪些像素值少。在#RGB空间下,可以简单地将值域分为4个区间,每个区间代表一个64px(pixel),即[0,64)、[64.128)、#[128,192)、[192,255] 4个区间,然后统计图片中所有像素落在这4个区间的像素点个数
grayImage=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
#其参数意义为:
#图像,通道索引(灰度图的通道索引赋值为0),接下来是mask,只计算mask为1的区域,下一个参数是根据通道设置的区间数,如果为彩色区间,可为[8,8,8]:最后一个是图像的值域

hist=cv2.calcHist([grayImage],[0],None,[256],[0,256])

平滑及模糊

常用的平滑方法有均值、高斯、中值、双边)

cv2.blur(image,(3,3))
cv2.gaussianBlur(image,(3,3),0)
cv2.medianBlur(image,3)
#5,21,21分别为滤波半径及sigmax及sigmay的值
cv2.bilateralFilter(image,5,21,21)

边缘检测

平滑降噪,求梯度,非极大值抑制与滞后阈值

#opencv使用canny算子完成此操作 
 import numpy as np
 import cv2

 image = cv2.imread('test.jpg')
 cv2.imshow("image", image)

 blured = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
 blured = cv2.GaussianBlur(blured, (5, 5), 0)
 cv2.imshow("Blurred", blured)

 canny = cv2.Canny(blured, 30, 150)
 cv2.imshow("Canny", canny)
 cv2.waitKey(0)

最后

以上就是怕孤独帽子为你收集整理的【Opencv】计算机视觉中opencv的常见操作像素点的赋值图像的切片操作基本的绘制操作仿射变换的相关操作:平移,缩放,旋转,剪切加减运算位操作及遮罩色彩通道的分离和融合操作颜色直方图平滑及模糊边缘检测的全部内容,希望文章能够帮你解决【Opencv】计算机视觉中opencv的常见操作像素点的赋值图像的切片操作基本的绘制操作仿射变换的相关操作:平移,缩放,旋转,剪切加减运算位操作及遮罩色彩通道的分离和融合操作颜色直方图平滑及模糊边缘检测所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部