python区域图_pythoncv2截取不规则区域图⽚实例知识掌握
cv2.threshold()函数:
设置固定级别的阈值应⽤于多通道矩阵,将灰度图像变换⼆值图像,或去除指定级别的噪声,或过滤掉过⼩或者过⼤的像素点。
Python: cv2.threshold(src, thresh, maxval, type[, dst]) → retval, dst
在其中:
src:表⽰的是图⽚源
thresh:表⽰的是阈值(起始值)
maxval:表⽰的是最⼤值
type:表⽰的是这⾥划分的时候使⽤的是什么类型的算法,常⽤值为0(cv2.THRESH_BINARY)
import cv2
img = cv2.imread('1.jpg')
cv2.imshow("src", img)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, dst = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
cv2.imshow("dst", dst)
cv2.waitKey(0)
cv2.findContours()函数:
查检测物体的轮廓
cv2.findContours(image, mode, method)
opencv2返回两个值:contours:hierarchy。
注:opencv3会返回三个值,分别是img, countours, hierarchy
在其中:
image:表⽰的是寻轮廓的图像;
mode:表⽰的是轮廓的检索模式,有四种:
cv2.RETR_EXTERNAL表⽰只检测外轮廓
cv2.RETR_LIST检测的轮廓不建⽴等级关系
cv2.RETR_CCOMP建⽴两个等级的轮廓,上⾯的⼀层为外边界,⾥⾯的⼀层为内孔的边界信息。如果内孔内还有⼀个连通物体,这个物体的边界也在顶层。
cv2.RETR_TREE建⽴⼀个等级树结构的轮廓。
method:表⽰的是轮廓的近似办法
cv2.CHAIN_APPROX_NONE存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1
cv2.CHAIN_APPROX_SIMPLE压缩⽔平⽅向,垂直⽅向,对⾓线⽅向的元素,只保留该⽅向的终点坐标,例如⼀个矩形轮廓只需4个点来保存轮廓信息
cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使⽤teh-Chinl chain 近似算法
import numpy as np
import cv2
rectangle = np.zeros((300,300),dtype="uint8")
cv2.imshow("Rectangle",rectangle)
img, countours, hierarchy = cv2.findContours(rectangle, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
print(countours)
print(hierarchy)
cv2.waitKey(0)
[array([[[ 25, 25]],
[[ 25, 275]],
[[275, 275]],
[[275, 25]]], dtype=int32)]
[[[-1 -1 -1 -1]]]
cv2.polylines函数:
绘制多边形
cv2.polylines(img, pts, isClosed, color[, thickness[, lineType[,shift]]])
⾸先需要顶点坐标.将这些点转换为rowsx1x2形状的数组,其中rows是顶点数,它应该是int32类型。
import numpy as np
import cv2
# Create a black image
img = np.zeros((200, 200, 3), np.uint8)
pts = np.array([[10, 5], [20, 30], [70, 20], [50, 10]], np.int32) # 每个点都是(x, y)
pts = shape((-1, 1, 2))
cv2.polylines(img, [pts], True, (0, 255, 255))
pts = np.array([[100, 5], [150, 30], [80, 20], [90, 10]], np.int32)
cv2.polylines(img, [pts], False, (0, 255, 255))
cv2.imshow('img2', img)
cv2.waitKey()
如果第三个参数为False,您将获得连接所有点的折线,⽽不是闭合形状。
cv2.polylines()可⽤于绘制多条线.只需创建要绘制的所有⾏的列表并将其传递给函数, 所有线条都将单独绘制.绘制⼀组⾏⽐为每⾏调⽤
cv2.line()要好得多,速度更快.
cv2.fillPoly)函数
可以⽤来填充任意形状的图型.可以⽤来绘制多边形,⼯作中也经常使⽤⾮常多个边来近似的画⼀条曲线.cv2.fillPoly()函数可以⼀次填充多个图型.
cv2.fillPoly(image,ppt,Scalar(255,255,255))
image:表⽰的是多边形将被画到image上
ppt:表⽰的是多边形的顶点集为ppt
Scalar:表⽰的是多边形的颜⾊定义为Scarlar(255,255,255),即RGB的值为⽩⾊
img = np.zeros((1080, 1920, 3), np.uint8)
area1 = np.array([[250, 200], [300, 100], [750, 800], [100, 1000]])
area2 = np.array([[1000, 200], [1500, 200], [1500, 400], [1000, 400]])
cv2.fillPoly(img, [area1, area2], (255, 255, 255))
plt.imshow(img)
plt.show()
按位操作-bitwise operations
import numpy as np
import cv2
rectangle = np.zeros((300,300),dtype="uint8")
cv2.imshow("Rectangle",rectangle)
circle = np.zeros((300,300),dtype="uint8")
cv2.circle(circle,(150,150),150,255,-1)
cv2.imshow("Circle",circle)
bitwiseAnd = cv2.bitwise_and(rectangle,circle)
cv2.imshow("And",bitwiseAnd)
bitwiseOr = cv2.bitwise_or(rectangle,circle)
cv2.imshow("OR",bitwiseOr)
bitwiseXor = cv2.bitwise_xor(rectangle,circle)
cv2.imshow("XOR",bitwiseXor)
bitwiseNot = cv2.bitwise_not(rectangle)
cv2.imshow("Not",bitwiseNot)
cv2.waitKey(0)
如果⼀个给定的像素的值⼤于零,那么这个像素会被打开,如果它的值为零,它就会被关闭。按位功能在这些⼆进制条件下运⾏。
AND:当且仅当两个像素都⼤于零时,按位AND才为真。
OR:如果两个像素中的任何⼀个⼤于零,则按位“或”为真。
XOR 异或功能:当且仅当两个像素中的任何⼀个⼤于零时,按位XOR才为真,但不是两者都是。当且仅当两个像素⼀个⼤于0⼀个⼩于0时才为真,其他都为false
NOT 取反:倒置图像中的“开”和“关”像素。
# -*- coding: utf-8 -*-
import cv2
import numpy as np
global img global point1, point2
rectangle函数opencvlsPointsChoose = []
tpPointsChoose = []
pointsCount = 0
count = 0
pointsMax = 5
lsPointsChoose = []
tpPointsChoose = []
pointsCount = 0
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论