opencv基础55-获取轮廓的特征值及示例

这篇具有很好参考价值的文章主要介绍了opencv基础55-获取轮廓的特征值及示例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

轮廓自身的一些属性特征及轮廓所包围对象的特征对于描述图像具有重要意义。本节介绍几个轮廓自身的属性特征及轮廓所包围对象的特征。

宽高比

可以使用宽高比(AspectRation)来描述轮廓,例如矩形轮廓的宽高比为:

宽高比 = 宽度(Width)/高度(Height)

示例:编写程序计算矩形轮廓的宽高比。

import cv2
o = cv2.imread('cc.bmp')
cv2.imshow("original",o)
gray = cv2.cvtColor(o,cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary,
 cv2.RETR_LIST,
cv2.CHAIN_APPROX_SIMPLE)
x,y,w,h = cv2.boundingRect(contours[0])
cv2.rectangle(o,(x,y),(x+w,y+h),(255,255,255),3)
aspectRatio = float(w)/h

print(aspectRatio)
cv2.imshow("result",o)
cv2.waitKey()
cv2.destroyAllWindows()

运行结果:
同时,程序还会显示如下的运行结果:

2.1506849315068495

可以看出,轮廓的宽高比约为 2。
opencv基础55-获取轮廓的特征值及示例,计算机视觉,opencv,人工智能,opencv,人工智能,计算机视觉,目标检测,python,图像处理

Extent(用轮廓面积与矩形边界(矩形包围框、矩形轮廓)面积之比 )

可以使用轮廓面积与矩形边界(矩形包围框、矩形轮廓)面积之比 Extend 来描述图像及
其轮廓特征。计算方法为:
opencv基础55-获取轮廓的特征值及示例,计算机视觉,opencv,人工智能,opencv,人工智能,计算机视觉,目标检测,python,图像处理

示例:计算图像的轮廓面积与其矩形边界面积之比。

import cv2
o = cv2.imread('cc.bmp')
cv2.imshow("original",o)
gray = cv2.cvtColor(o,cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary,
 cv2.RETR_LIST,
cv2.CHAIN_APPROX_SIMPLE)
x,y,w,h = cv2.boundingRect(contours[0])
cv2.drawContours(o,contours[0],-1,(0,0,255),3)
cv2.rectangle(o,(x,y),(x+w,y+h),(255,0,0),3)
#----------------计算轮廓的面积与边界矩形的面积-------------------------
rectArea=w*h
cntArea=cv2.contourArea(contours[0])

extend=float(cntArea)/rectArea
print(extend)
cv2.imshow("result",o)
cv2.waitKey()
cv2.destroyAllWindows()

同时,程序还会显示如下的运行结果:

0.6717127650292296

可以看出,本例中图像的轮廓面积与矩形边界面积的比值大约为 0.7。
opencv基础55-获取轮廓的特征值及示例,计算机视觉,opencv,人工智能,opencv,人工智能,计算机视觉,目标检测,python,图像处理

Solidity(轮廓面积与凸包面积之比)

可以使用轮廓面积与凸包面积之比 Solidity 来衡量图像、轮廓及凸包的特征。其计算方法为:

opencv基础55-获取轮廓的特征值及示例,计算机视觉,opencv,人工智能,opencv,人工智能,计算机视觉,目标检测,python,图像处理

示例:编写程序计算图像轮廓面积与凸包面积之比。

import cv2
o = cv2.imread('hand.bmp')
cv2.imshow("original",o)
gray = cv2.cvtColor(o,cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
contours, hierarchy =cv2.findContours(binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(o,contours[0],-1,(0,0,255),3)
cntArea=cv2.contourArea(contours[0])
hull = cv2.convexHull(contours[0])
hullArea = cv2.contourArea(hull)
cv2.polylines(o, [hull], True, (0, 255, 0), 2)
solidity=float(cntArea)/hullArea
print(solidity)
cv2.imshow("result",o)
cv2.waitKey()
cv2.destroyAllWindows()

同时,程序还会显示如下的运行结果:

0.6752344564084751

可以看出,本例中图像的轮廓面积与凸包面积的比值约为 0.7。

就是绿色的跟红色的面积之比
opencv基础55-获取轮廓的特征值及示例,计算机视觉,opencv,人工智能,opencv,人工智能,计算机视觉,目标检测,python,图像处理

等效直径(Equivalent Diameter)

可以用等效直径来衡量轮廓的特征值,该值是与轮廓面积相等的圆形的直径。其计算公式为:

opencv基础55-获取轮廓的特征值及示例,计算机视觉,opencv,人工智能,opencv,人工智能,计算机视觉,目标检测,python,图像处理

示例:计算与轮廓面积相等的圆形的直径,并绘制与该轮廓等面积的圆。

import cv2
import numpy as np
o = cv2.imread('cc.bmp')
cv2.imshow("original",o)
gray = cv2.cvtColor(o,cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary,
 cv2.RETR_LIST,
 cv2.CHAIN_APPROX_SIMPLE)

cv2.drawContours(o,contours[0],-1,(0,0,255),3)
cntArea=cv2.contourArea(contours[0])
equiDiameter = np.sqrt(4*cntArea/np.pi)
print(equiDiameter)
cv2.circle(o,(100,100),int(equiDiameter/2),(0,0,255),3) #展示等直径大小的圆
cv2.imshow("result",o)
cv2.waitKey()
cv2.destroyAllWindows()

同时,程序还会显示如下的运行结果:

99.00522529212108

可以看出,与本例中与轮廓面积相等的圆形的直径约为 99。

opencv基础55-获取轮廓的特征值及示例,计算机视觉,opencv,人工智能,opencv,人工智能,计算机视觉,目标检测,python,图像处理

方向

在 OpenCV 中,函数 cv2.fitEllipse()可以用来构造最优拟合椭圆,还可以在返回值内分别返回椭圆的中心点、轴长、旋转角度等信息。使用这种形式,能够更直观地获取椭圆的方向等信息。
函数 cv2.fitEllipse()返回各个属性值的语法格式为:

(x,y),(MA,ma),angle = cv2.fitEllipse(cnt)

式中几个返回值的意义如下:

  • (x,y):椭圆的中心点。
  • (MA,ma):椭圆水平方向轴和垂直方向轴的长度。
  • angle:椭圆的旋转角度。

示例:观察函数 cv2.fitEllipse()的不同返回值

import cv2
o = cv2.imread('cc.bmp')

cv2.imshow("original",o)
gray = cv2.cvtColor(o,cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary,
 cv2.RETR_LIST,
cv2.CHAIN_APPROX_SIMPLE)

ellipse = cv2.fitEllipse(contours[0])
retval=cv2.fitEllipse(contours[0])
print("单个返回值形式:")
print("retval=\n",retval)
(x,y),(MA,ma),angle = cv2.fitEllipse(contours[0])
print("三个返回值形式:")
print("(x,y)=(",x,y,")")
print("(MA,ma)=(",MA,ma,")")
print("angle=",angle)
cv2.ellipse(o,ellipse,(0,0,255),2)
cv2.imshow("result",o)
cv2.waitKey()
cv2.destroyAllWindows()

同时,程序还会显示如下的运行结果:

单个返回值形式:
retval=
((276.2112731933594, 139.6067352294922), (63.01350021362305,
166.72308349609375), 82.60102844238281)
三个返回值形式:
(x,y)=( 276.2112731933594 139.6067352294922 )
(MA,ma)=( 63.01350021362305 166.72308349609375 )
angle= 82.60102844238281

从以上运行结果可以看出,函数 cv2.fitEllipse()以不同形式返回的值是相同的。

opencv基础55-获取轮廓的特征值及示例,计算机视觉,opencv,人工智能,opencv,人工智能,计算机视觉,目标检测,python,图像处理

掩模和像素点

有时,我们希望获取某对象的掩模图像及其对应的点。51 节介绍了将函数cv2.drawContours()的轮廓宽度参数 thickness 设置为“-1”,即可获取特定对象的实心轮廓,即特定对象的掩模。

另外,我们可能还希望获取轮廓像素点的具体位置信息。本节介绍如何获取轮廓(实心、空心)的像素点位置信息。

一般情况下,轮廓是图像内非零的像素点,可以通过两种方式获取轮廓像素点的位置信息。

一种是使用 Numpy 函数,另外一种是使用 OpenCV 函数。
1.使用Numpy函数获取轮廓像素点
numpy.nonzero()函数能够找出数组内非零元素的位置,但是其返回值是将行、列分别显示
的。
例如,对于如下数组 a 应用函数 numpy.nonzero():

a=
[[0 0 0 1 0]
[0 0 1 0 1]
[0 0 1 1 1]
[1 0 0 0 0]
[1 0 0 0 1]]

返回的数组 a 内非零元素的位置信息为:
(array([0, 1, 1, 2, 2, 2, 3, 4, 4], dtype=int64), array([3, 2, 4, 2, 3, 4, 0,
0, 4], dtype=int64))
使用 numpy.transpose()函数处理上述返回值,则得到这些点的(x, y)形式的坐标:

[[0 3] [1 2] [1 4] [2 2] [2 3] [2 4] [3 0] [4 0] [4 4]]

示例:使用 Numpy 函数获取一个数组内的非零值元素的位置信息。

代码如下:

import numpy as np
#------------生成一个元素都是零值的数组 a-------------------
a=np.zeros((5,5),dtype=np.uint8)
#-------随机将其中 10 个位置上的数值设置为 1------------
#---times 控制次数
#---i,j 是随机生成的行、列位置

#---a[i,j]=1,将随机挑选出来的位置上的值设置为 1
for times in range(10):
 i=np.random.randint(0,5)
 j=np.random.randint(0,5)
 a[i,j]=1
#-------打印数组 a,观察数组 a 内值的情况-----------
print("a=\n",a)
#------查找数组 a 内非零值的位置信息------------
loc=np.transpose(np.nonzero(a))
#-----输出数组 a 内非零值的位置信息------------
print("a 内非零值的位置:\n",loc)

运行上述程序,会显示如下的运行结果:

a=
[[1 1 0 0 0]
[1 1 0 1 1]
[1 0 0 0 0]
[0 0 0 1 0]
[1 1 0 0 0]]
a 内非零值的位置:
[[0 0]
[0 1]
[1 0]
[1 1]
[1 3]
[1 4]
[2 0]
[3 3]
[4 0]
[4 1]]

示例:使用 Numpy 函数获取一个图像内的轮廓点位置。

import cv2
import numpy as np
#-----------------读取原始图像----------------------
o = cv2.imread('cc.bmp')
cv2.imshow("original",o)
#-----------------获取轮廓------------------------
gray = cv2.cvtColor(o,cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary,
 cv2.RETR_LIST,
cv2.CHAIN_APPROX_SIMPLE)
cnt=contours[0]

#-----------------绘制空心轮廓------------------------
mask1 = np.zeros(gray.shape,np.uint8)
cv2.drawContours(mask1,[cnt],0,255,2)
pixelpoints1 = np.transpose(np.nonzero(mask1))
print("pixelpoints1.shape=",pixelpoints1.shape)
print("pixelpoints1=\n",pixelpoints1)
cv2.imshow("mask1",mask1)
#-----------------绘制实心轮廓---------------------
mask2 = np.zeros(gray.shape,np.uint8)
cv2.drawContours(mask2,[cnt],0,255,-1)
pixelpoints2 = np.transpose(np.nonzero(mask2))
print("pixelpoints2.shape=",pixelpoints2.shape)
print("pixelpoints2=\n",pixelpoints2)
cv2.imshow("mask2",mask2)
#-----------------释放窗口------------------------
cv2.waitKey()
cv2.destroyAllWindows()

opencv基础55-获取轮廓的特征值及示例,计算机视觉,opencv,人工智能,opencv,人工智能,计算机视觉,目标检测,python,图像处理

  • 左图是图像 o。
  • 中间的是空心轮廓图像 mask1。
  • 右图是实心轮廓图像 mask2。

同时,程序还会显示如下的运行结果:

pixelpoints1.shape= (1400, 2)
pixelpoints1=
 [[106 292]
 [106 293]
 [106 294]
 ...
 [180 222]
 [180 223]
 [180 224]]
pixelpoints2.shape= (7892, 2)
pixelpoints2=
 [[107 293]
 [107 294]
 [107 295]
 ...
 [179 221]
 [179 222]
 [179 223]]

使用OpenCV函数获取轮廓点

OpenCV 提供了函数 cv2.findNonZero()用于查找非零元素的索引。该函数的语法格式为:

idx = cv2.findNonZero( src )

式中:

  • idx 为返回值,表示非零元素的索引位置。需要注意的是,在返回的索引中,每个元素对应的是(列号,行号)的格式。
  • src 为参数,表示要查找非零元素的图像。

示例: 使用 OpenCV 函数 cv2.findNonZero()获取一个数组内的非零值。

代码如下:

import cv2
import numpy as np
#------------生成一个元素都是零值的数组 a-------------------
a=np.zeros((5,5),dtype=np.uint8)
#-------随机将其中 10 个位置上的值设置为 1------------
#---times 控制次数
#---i,j 是随机生成的行、列位置
#---a[i,j]=1,将随机挑选出来的位置上的值设置为 1
for times in range(10):
 i=np.random.randint(0,5)
 j=np.random.randint(0,5)
 a[i,j]=1
#-------打印数组 a,观察数组 a 内值的情况-----------
print("a=\n",a)
#------查找数组 a 内非零值的位置信息------------
loc = cv2.findNonZero(a)
#-----输出数组 a 内非零值的位置信息------------
print("a 内非零值的位置:\n",loc)

运行上述程序,会显示如下的运行结果:

a=
 [[1 1 0 0 0]
 [0 0 0 0 1]
 [0 0 1 1 0]
 [0 0 0 0 1]
 [0 0 0 0 0]]
a 内非零值的位置:
 [[[0 0]]

 [[1 0]]

 [[4 1]]

 [[2 2]]

 [[3 2]]

 [[4 3]]]

示例:使用 OpenCV 函数 cv2.findNonZero()获取一个图像内的轮廓点的位置。

import cv2
import numpy as np
#-----------------读取原始图像----------------------
o = cv2.imread('cc.bmp')
cv2.imshow("original",o)
#-----------------获取轮廓------------------------
gray = cv2.cvtColor(o,cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary,
 cv2.RETR_LIST,
cv2.CHAIN_APPROX_SIMPLE)
cnt=contours[0]
#-----------------绘制空心轮廓------------------------
mask1 = np.zeros(gray.shape,np.uint8)
cv2.drawContours(mask1,[cnt],0,255,2)
pixelpoints1 = cv2.findNonZero(mask1)
print("pixelpoints1.shape=",pixelpoints1.shape)
print("pixelpoints1=\n",pixelpoints1)
cv2.imshow("mask1",mask1)
#-----------------绘制实心轮廓---------------------
mask2 = np.zeros(gray.shape,np.uint8)
cv2.drawContours(mask2,[cnt],0,255,-1)
pixelpoints2 = cv2.findNonZero(mask2)
print("pixelpoints2.shape=",pixelpoints2.shape)
print("pixelpoints2=\n",pixelpoints2)
cv2.imshow("mask2",mask2)
#-----------------释放窗口------------------------
cv2.waitKey()
cv2.destroyAllWindows()
  • 左图是原图像 o。
  • 中间的是空心轮廓图像 mask1。
  • 右图是实心轮廓图像 mask2。
    opencv基础55-获取轮廓的特征值及示例,计算机视觉,opencv,人工智能,opencv,人工智能,计算机视觉,目标检测,python,图像处理
    同时,程序还会显示如下的运行结果:
pixelpoints1.shape= (1400, 1, 2)
pixelpoints1=
[[[292 106]]
[[293 106]]
[[294 106]]
...
[[222 180]]
[[223 180]]
[[224 180]]]
pixelpoints2.shape= (7892, 1, 2)
pixelpoints2=
[[[293 107]]
[[294 107]]
[[295 107]]
...
[[221 179]]
[[222 179]]
[[223 179]]]

最大值和最小值及它们的位置

OpenCV 提供了函数 cv2.minMaxLoc(),用于在指定的对象内查找最大值、最小值及其位
置。该函数的语法格式是:

min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(imgray,mask = mask)

式中的返回值为:

  • min_val:最小值。

  • max_val:最大值。

  • min_loc:最小值的位置。

  • max_loc:最大值的位置。
    式中的参数如下:

  • imgray:单通道图像。

  • mask:掩模。通过使用掩模图像,可以得到掩模指定区域内的最值信息。

示例:使用函数 cv2.minMaxLoc()在图像内查找掩模指定区域内的最大值、最小值及其位置。

import cv2
import numpy as np
o = cv2.imread('ct.png')
cv2.imshow("original",o)
gray = cv2.cvtColor(o,cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary,
 cv2.RETR_LIST,
cv2.CHAIN_APPROX_SIMPLE)
cnt=contours[2] #coutours[0]、coutours[1]是左侧字母 R
#--------使用掩模获取感兴趣区域的最值-----------------
#需要注意函数 minMaxLoc 处理的对象为灰度图像,本例中处理的对象为灰度图像 gray
#如果希望获取彩色图像的最值,需要提取各个通道图像,为每个通道独立计算最值
mask = np.zeros(gray.shape,np.uint8)
mask=cv2.drawContours(mask,[cnt],-1,255,-1)
minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(gray,mask = mask)
print("minVal=",minVal)
print("maxVal=",maxVal)
print("minLoc=",minLoc)
print("maxLoc=",maxLoc)
#--------使用掩模获取感兴趣区域并显示-----------------
masko = np.zeros(o.shape,np.uint8)
masko=cv2.drawContours(masko,[cnt],-1,(255,255,255),-1)
loc=cv2.bitwise_and(o,masko)
cv2.imshow("mask",loc)
#显示灰度结果
#loc=cv2.bitwise_and(gray,mask)
#cv2.imshow("mask",loc)
#--------释放窗口-----------------
cv2.waitKey()
cv2.destroyAllWindows()

示例原图

opencv基础55-获取轮廓的特征值及示例,计算机视觉,opencv,人工智能,opencv,人工智能,计算机视觉,目标检测,python,图像处理

  • 左图是图像 o。
  • 右图是掩模图像 mask。
    opencv基础55-获取轮廓的特征值及示例,计算机视觉,opencv,人工智能,opencv,人工智能,计算机视觉,目标检测,python,图像处理

同时,程序还会显示如下的运行结果:

minVal= 42.0
maxVal= 200.0
minLoc= (87, 90)
maxLoc= (90, 110)

平均颜色及平均灰度

OpenCV 提供了函数 cv2.mean(),用于计算一个对象的平均颜色或平均灰度。该函数的语
法格式为:

mean_val = cv2.mean(im,mask = mask)

式中的返回值为 mean_val,表示返回的平均值。
式中的参数如下:

  • im:原图像。
  • mask:掩模。

示例:使用函数 cv2.mean()计算一个对象的平均灰度。

import cv2
import numpy as np
#--------读取并显示原始图像-----------------
o = cv2.imread('ct.png')
cv2.imshow("original",o)
#--------获取轮廓-----------------
gray = cv2.cvtColor(o,cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary,
 cv2.RETR_LIST,
cv2.CHAIN_APPROX_SIMPLE)
cnt=contours[2] #coutours[0]、coutours[1]是左侧字母 R
#--------使用掩模获取感兴趣区域的均值-----------------
mask = np.zeros(gray.shape,np.uint8) #构造 mean 所使用的掩模(必须是单通道的)

cv2.drawContours(mask,[cnt],0,(255,255,255),-1)
meanVal = cv2.mean(o,mask = mask) # mask 是一个区域,所以必须是单通道的
print("meanVal=\n",meanVal)
#--------使用掩模获取感兴趣区域并显示-----------------
masko = np.zeros(o.shape,np.uint8)
cv2.drawContours(masko,[cnt],-1,(255,255,255),-1)
loc=cv2.bitwise_and(o,masko)
cv2.imshow("mask",loc)
#--------释放窗口-----------------
cv2.waitKey()
cv2.destroyAllWindows()

opencv基础55-获取轮廓的特征值及示例,计算机视觉,opencv,人工智能,opencv,人工智能,计算机视觉,目标检测,python,图像处理

  • 左图是图像 o。
  • 右图是获取的感兴趣区域。

同时,程序还会显示如下的运行结果:

meanVal= (85.45594913714805, 85.45594913714805, 85.45594913714805, 0.0)

从上述结果可以看出,函数 cv2.mean()能够计算各个通道的均值。上述 4 个值分别是 RGB和 A 通道(alpha
通道)的均值。本例中,RGB 三个通道的值相同,所以计算出的均值也是一样的。

极点

有时,我们希望获取某个对象内的极值点,例如最左端、最右端、最上端、最下端的四个
点。OpenCV 提供了相应的函数来找出这些点,通常的语法格式是:

leftmost = tuple(cnt[cnt[:,:,0].argmin()][0])
rightmost = tuple(cnt[cnt[:,:,0].argmax()][0])
topmost = tuple(cnt[cnt[:,:,1].argmin()][0])
bottommost = tuple(cnt[cnt[:,:,1].argmax()][0])

示例: 计算一幅图像内的极值点。

import cv2
import numpy as np
o = cv2.imread('cs.bmp')
#--------获取并绘制轮廓-----------------
gray = cv2.cvtColor(o,cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
mask = np.zeros(gray.shape,np.uint8)
cnt=contours[0]
cv2.drawContours(mask,[cnt],0,255,-1)
#--------计算极值-----------------
leftmost = tuple(cnt[cnt[:,:,0].argmin()][0])
rightmost = tuple(cnt[cnt[:,:,0].argmax()][0])
topmost = tuple(cnt[cnt[:,:,1].argmin()][0])
bottommost = tuple(cnt[cnt[:,:,1].argmax()][0])
#--------打印极值-----------------
print("leftmost=",leftmost)
print("rightmost=",rightmost)
print("topmost=",topmost)
print("bottommost=",bottommost)
#--------绘制说明文字-----------------
font=cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(o,'A',leftmost, font, 1,(0,0,255),2)
cv2.putText(o,'B',rightmost, font, 1,(0,0,255),2)
cv2.putText(o,'C',topmost, font, 1,(0,0,255),2)
cv2.putText(o,'D',bottommost, font, 1,(0,0,255),2)
#--------绘制图像-----------------
cv2.imshow("result",o)
#--------释放窗口-----------------
cv2.waitKey()
cv2.destroyAllWindows()

其中的A,B,C,D 就是该图像的极点
opencv基础55-获取轮廓的特征值及示例,计算机视觉,opencv,人工智能,opencv,人工智能,计算机视觉,目标检测,python,图像处理
同时,程序还会显示如下的运行结果:文章来源地址https://www.toymoban.com/news/detail-651787.html

leftmost= (202, 135)
rightmost= (423, 120)
topmost= (369, 69)
bottommost= (216, 179)

到了这里,关于opencv基础55-获取轮廓的特征值及示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 矩阵理论| 基础:特征值与特征向量、代数重数/几何重数、相似对角化和Jordan标准型

    矩阵 A mathbf A A 的特征值与特征向量满足 A x = λ x mathbf Amathbf x=lambdamathbf x Ax = λ x ,即 ( A − λ I ) x = 0 (mathbf A-lambdamathbf I)mathbf x=0 ( A − λ I ) x = 0 ,且 x ≠ 0 mathbf xneq0 x  = 0 特征值 : d e t ( A − λ I ) = 0 det(mathbf A-lambdamathbf I)=0 d e t ( A − λ I ) = 0 的根,其中 p ( λ

    2024年02月05日
    浏览(55)
  • 特征值和特征向量的解析解法--带有重复特征值的矩阵

    当一个矩阵具有重复的特征值时,意味着存在多个线性无关的特征向量对应于相同的特征值。这种情况下,我们称矩阵具有重复特征值。 考虑一个n×n的矩阵A,假设它有一个重复的特征值λ,即λ是特征值方程det(A-λI) = 0的多重根。我们需要找到与特征值λ相关的特征向量。 首

    2024年02月05日
    浏览(48)
  • 【问题证明】矩阵方程化为特征值方程求得的特征值为什么是全部特征值?不会丢解吗?

    这个问题困扰了我好久,一直感觉如果有其他的特征值没法证伪,不过一直存在思想的层面,没有实际解决,今天突然想到动笔来解决,遂得解,证明如下。 这个证明看似证明过后很直观,但实际上思维走向了牛角尖的时候光靠思考是无法得出令人信服的结论的,唯有实际动

    2024年02月05日
    浏览(59)
  • 线性代数高级--二次型--特征值与特征向量--特征值分解--多元函数的泰勒展开

    目录 二次型 概念 示例   性质和特点 特征值与特征向量 概念 示例  注意  性质和特点  特征值分解 注意 多元函数的泰勒展开  回顾一元函数泰勒展开  多元函数的泰勒展开 概念 二次型是一个关于向量的二次多项式,通常用矩阵表示。 考虑一个n维向量x = [x₁, x₂, ...,

    2024年02月11日
    浏览(55)
  • 12、特征值与特征向量

    目录 一、特征值和特征向量的定义 二、特征值和特征向量的相关函数 三、特征值和特征向量的计算 假设A是一个n×n的矩阵,A的特征值问题就是找到下面方程组的解: 其中,λ为标量,V为矢量,若把矩阵A的n个特征值放在矩阵P的对角线上,相应的特征向量按照与特征值对应

    2024年02月07日
    浏览(46)
  • 线性代数|证明:矩阵特征值的倒数是其逆矩阵的特征值

    性质 1 若 λ lambda λ 是 A boldsymbol{A} A 的特征值,当 A boldsymbol{A} A 可逆时, 1 λ frac{1}{lambda} λ 1 ​ 是 A − 1 boldsymbol{A}^{-1} A − 1 的特征值。 证明 因为 λ lambda λ 是 A boldsymbol{A} A 的特征值,所以有 p ≠ 0 boldsymbol{p} ne 0 p  = 0 使 A p = λ p boldsymbol{A} boldsymbol{p} = lambda

    2024年02月08日
    浏览(50)
  • 特征值和特征向量的通俗解释

    我们知道,特征向量的公式是                 ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​         其中A代表矩阵,x代表特征向量,代表特征值。 众所

    2024年02月15日
    浏览(34)
  • 线性代数——特征值和特征向量

    学习高等数学和线性代数需要的初等数学知识 线性代数——行列式 线性代数——矩阵 线性代数——向量 线性代数——线性方程组 线性代数——特征值和特征向量 线性代数——二次型 本文大部分内容皆来自李永乐老师考研教材和视频课。 设 A = [ a i j ] A=[a_{ij}] A = [ a ij ​

    2024年02月15日
    浏览(46)
  • 《数值分析》-3-特征值与特征矩阵

    搜索技术的很多方面的知识发现都依赖于特征值或奇异值问题,涉及到特征值计算问题。 计算特征值没有直接的方法。 定位特征值的计算方法基于幂迭代的思想,这是求解特征值的一类迭代方法。该思想的一个复杂版本被称为QR算法,是确定典型矩阵所有特征值的一般方法。

    2024年02月08日
    浏览(48)
  • 线性代数 --- 特征值与特征向量

    Part I:特征值,特征向量的意义与性质         已知任意向量x,现有矩阵A对x进行操作后,得到新的向量Ax。这就好比是自变量x与函数f(x)的关系一样,向量x通过类似“函数”的处理得到了一个新的向量Ax。这个新的向量可能和原向量x方向相同,也可能不同(事实上大多都不同

    2024年03月10日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包