面试(opencv)

2023-05-16

作者:孙兔子(本人)
链接:面试题 (opencv)_讨论帖_牛客网
来源:牛客网

#### 12)形态学梯度

复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

# 形态学梯度示例

import cv2

import numpy as np

o = cv2.imread("../data/6.png")

k = np.ones((33), np.uint8)

r = cv2.morphologyEx(o, cv2.MORPH_GRADIENT, k)

cv2.imshow("original", o)

cv2.imshow("result", r)

cv2.waitKey()

cv2.destroyAllWindows()


### 5. 图像梯度处理

#### 1)模糊处理

复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

# 图像模糊处理示例

import cv2

import numpy as np

## 中值滤波

im = cv2.imread("../data/lena.jpg"0)

cv2.imshow("orig", im)

# 调用medianBlur中值模糊

# 第二个参数为滤波模板的尺寸大小,必须是大于1的奇数,如357

im_median_blur = cv2.medianBlur(im, 5)

cv2.imshow('median_blur', im_median_blur)

# 均值滤波

# 第二个参数为滤波模板的尺寸大小

im_mean_blur = cv2.blur(im, (33))

cv2.imshow("mean_blur", im_mean_blur)

# 高斯滤波

# 第三个参数为高斯核在X方向的标准差

im_gaussian_blur = cv2.GaussianBlur(im, (55), 3)

cv2.imshow("gaussian_blur", im_gaussian_blur)

# 使用高斯算子和filter2D自定义滤波操作

gaussan_blur = np.array([

    [14741],

    [41626164],

    [72641267],

    [41626164],

    [14741]], np.float32) / 273

# 使用filter2D, 第二个参数为目标图像的所需深度, -1表示和原图像相同

im_gaussian_blur2 = cv2.filter2D(im, -1, gaussan_blur)  自定义卷积和,实现二维卷积 

cv2.imshow("gaussian_blur2", im_gaussian_blur2)

cv2.waitKey()

cv2.destroyAllWindows()


#### 2)图像锐化处理

复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

# 图像锐化示例

import cv2

import numpy as np

im = cv2.imread("../data/lena.jpg"0)

cv2.imshow("orig", im)

# 锐化算子1

sharpen_1 = np.array([[-1, -1, -1],

            [-19, -1],

            [-1, -1, -1]])

# 使用filter2D进行滤波操作

im_sharpen1 = cv2.filter2D(im, -1, sharpen_1)

cv2.imshow("sharpen_1", im_sharpen1)

# 锐化算子2

sharpen_2 = np.array([[0, -10],

            [-18, -1],

            [010]]) / 4.0

# 使用filter2D进行滤波操作

im_sharpen2 = cv2.filter2D(im, -1, sharpen_2)

cv2.imshow("sharpen_2", im_sharpen2)

cv2.waitKey()

cv2.destroyAllWindows()



#### 3)边沿检测

复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

# 边沿检测示例

import cv2 as cv

im = cv.imread('../data/lily.png'0)

cv.imshow('Original', im)

# # 水平方向滤波

# hsobel = cv.Sobel(im, cv.CV_64F, 10, ksize=5)

# cv.imshow('H-Sobel', hsobel)

# # 垂直方向滤波

# vsobel = cv.Sobel(im, cv.CV_64F, 01, ksize=5)

# cv.imshow('V-Sobel', vsobel)

# 两个方向滤波

# cv2.CV_64F: 输出图像深度,本来应该设置为-1,但如果设成-1,可能会发生计算错误

# 所以通常先设置为精度更高的CV_64F

sobel = cv.Sobel(im, cv.CV_64F, 11, ksize=5)

cv.imshow('Sobel', sobel)

# Laplacian滤波:对细节反映更明显

laplacian = cv.Laplacian(im, cv.CV_64F)

cv.imshow('Laplacian', laplacian)

# Canny边沿提取

canny = cv.Canny(im,

                 50, # 滞后阈值

                 240) # 模糊度

cv.imshow('Canny', canny)

cv.waitKey()

cv.destroyAllWindows()


### 6. 轮廓处理
    边缘检测虽然能够检测出边缘,但边缘是不连续的,检测到的边缘并不是一个整体。图像轮廓是指将边缘连接起来形成的一个整体,用于后续的计算。

    OpenCV提供了查找图像轮廓的函数cv2.findContours(),该函数能够查找图像内的轮廓信息,而函数cv2.drawContours()能够将轮廓绘制出来。图像轮廓是图像中非常重要的一个特征信息,通过对图像轮廓的操作,我们能够获取目标图像的大小、位置、方向等信息。一个轮廓对应着一系列的点,这些点以某种方式表示图像中的一条曲线。

#### 1)查找并绘制轮廓

- 查找轮廓函数:cv2.findContours

  - 语法格式:image,contours,hierarchy=cv2.findContours(image,mode,method)

  - 返回值
    - image:与函数参数中的原始图像image一致
    - contours:返回的轮廓。该返回值返回的是一组轮廓信息,每个轮廓都是由若干个点所构成的(每个轮廓为一个list表示)。例如,contours\[i\]是第i个轮廓(下标从0开始),contours\[i\]\[j\]是第i个轮廓内的第j个点
    - hierarchy:图像的拓扑信息(反映轮廓层次)。图像内的轮廓可能位于不同的位置。比如,一个轮廓在另一个轮廓的内部。在这种情况下,我们将 外部的轮廓称为父轮廓 ,内部的轮廓称为子轮廓。按照上述关系分类,一幅图像中所有轮廓之间就建立了父子关系。每个轮廓contours[i]对应4个元素来说明当前轮廓的层次关系。其形式为:[Next,Previous,First_Child,Parent],分别表示后一个轮廓的索引编号、前一个轮廓的索引编号、第1个子轮廓的索引编号、父轮廓的索引编号

  - 参数

    - 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    | 压缩水平方向、垂直方向、对角线方向的元素,只保留该方向的终点坐标 |
    | cv2.CHAIN_APPROX_TC89_L1   | 使用teh-Chinl chain近似算法的一种风格                        |
    | cv2.CHAIN_APPROX_TC89_KCOS | 使用teh-Chinl chain近似算法的一种风格                        |

  - 注意事项

    - 待处理的源图像必须是灰度二值图
    - 都是从黑色背景中查找白色对象。因此, 对象必须是白色的,背景必须是黑色的
    - 在OpenCV 4.x中,函数cv2.findContours() 仅有两个返回值

- 绘制轮廓:drawContours函数

  - 语法格式:image=cv2.drawContours(image, contours,contourIdx, color)
  - 参数
    - image:待绘制轮廓的图像
    - contours:需要绘制的轮廓,该参数的类型与函数 cv2.findContours()的输出 contours 相同,都是list类型
    - contourIdx:需要绘制的边缘索引,告诉函数cv2.drawContours()要绘制某一条轮廓还是全部轮廓。如果该参数是一个整数或者为零,则表示绘制对应索引号的轮廓;如果该值为负数(通常为“-1”),则表示绘制全部轮廓。

    - color:绘制的颜色,用BGR格式表示

复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

# 查找图像轮廓

import cv2

import numpy as np

im = cv2.imread("../data/3.png")

cv2.imshow("orig", im)

gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)

# 图像二值化处理,将大于阈值的设置为最大值,其它设置为0

ret, binary = cv2.threshold(gray, 127255, cv2.THRESH_BINARY)

# 查找图像边沿:cv2.findContours

img, contours, hierarchy = cv2.findContours(binary,  # 二值化处理后的图像

                        cv2.RETR_EXTERNAL,  # 只检测外轮廓

                        cv2.CHAIN_APPROX_NONE)  # 存储所有的轮廓点

# 打印所有轮廓值

arr_cnt = np.array(contours)

print(arr_cnt[0].shape)

print(arr_cnt[1].shape)

print(arr_cnt[2].shape)

print(arr_cnt[3].shape)

# print(arr_cnt[0])

# 绘制边沿

im_cnt = cv2.drawContours(im,  # 绘制图像

              contours,  # 轮廓点列表

              -1,  # 绘制全部轮廓

              (00255),  # 轮廓颜色:红色

               2)  # 轮廓粗细

cv2.imshow("im_cnt", im_cnt)

cv2.waitKey()

cv2.destroyAllWindows()


#### 2)绘制矩形包围框

函数cv2.boundingRect()能够绘制轮廓的矩形边界。该函数的语法格式为:

retval = cv2.boundingRect(array)  # 格式一
x,y,w,h = cv2.boundingRect(array) # 格式二

参数:
    array:是灰度图像或轮廓
返回值:
    retval:表示返回的矩形边界的左上角顶点的坐标值及矩形边界的宽度和高度
    x, y, w, h: 矩形边界左上角顶点的x坐标、y坐标、宽度、高度

复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

# 绘制图像矩形轮廓

import cv2

import numpy as np

im = cv2.imread("../data/cloud.png"0)

cv2.imshow("orig", im)

# 提取图像轮廓

ret, binary = cv2.threshold(im, 127255, cv2.THRESH_BINARY)  #二值化的两个返回值:阈值和图像

img, contours, hierarchy = cv2.findContours(binary,

                cv2.RETR_LIST,  # 不建立等级关系

                cv2.CHAIN_APPROX_NONE)  # 存储所有的轮廓点

print("contours[0].shape:", contours[0].shape)

# 返回轮廓定点及边长

x, y, w, h = cv2.boundingRect(contours[0])  # 计算矩形包围框的x,y,w,h

print("x:", x, "y:", y, "w:", w, "h:", h)

# 绘制矩形包围框

brcnt = np.array([[[x, y]], [[x + w, y]], [[x + w, y + h]], [[x, y + h]]])

cv2.drawContours(im,  # 绘制图像

        [brcnt],  # 轮廓点列表

        -1,  # 绘制全部轮廓

        (255255255),  # 轮廓颜色:白色

        2)  # 轮廓粗细

cv2.imshow("result", im)  # 显示绘制后的图像

cv2.waitKey()

cv2.destroyAllWindows()



#### 3)绘制圆形包围圈

函数 cv2.minEnclosingCircle()通过迭代算法构造一个对象的面积最小包围圆形。该函数的语法格式为:

center,radius=cv2.minEnclosingCircle(points)

参数:
    points: 轮廓数组
返回值:
    center: 最小包围圆形的中心
    radius: 最小包围圆形的半径

复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

# 绘制最小圆形

import cv2

import numpy as np

im = cv2.imread("../data/cloud.png"0)

cv2.imshow("orig", im)

# 提取图像轮廓

ret, binary = cv2.threshold(im, 127255, cv2.THRESH_BINARY)

img, contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)

(x, y), radius = cv2.minEnclosingCircle(contours[0])

center = (int(x), int(y))

radius = int(radius)

cv2.circle(im, center, radius, (255255255), 2)  # 绘制圆

cv2.imshow("result", im)  # 显示绘制后的图像

cv2.waitKey()

cv2.destroyAllWindows()


#### 4)绘制最佳拟合椭圆

函数cv2.fitEllipse()可以用来构造最优拟合椭圆。该函数的语法格式是:

retval=cv2.fitEllipse(points)

参数:
    points: 轮廓
返回值:
    retval: 为RotatedRect类型的值,包含外接矩形的质心、宽、高、旋转角度等参数信息,这些信息正好与椭圆的中心点、轴长度、旋转角度等信息吻合

复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

# 绘制最优拟合椭圆

import cv2

import numpy as np

im = cv2.imread("../data/cloud.png")

gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)

cv2.imshow("orig", gray)

# 提取图像轮廓

ret, binary = cv2.threshold(gray, 127255, cv2.THRESH_BINARY)

img, contours, hierarchy = cv2.findContours(binary,

                        cv2.RETR_LIST,

                        cv2.CHAIN_APPROX_NONE)

ellipse = cv2.fitEllipse(contours[0])  # 拟合最优椭圆

print("ellipse:", ellipse)

cv2.ellipse(im, ellipse, (00255), 2)  # 绘制椭圆

cv2.imshow("result", im)  # 显示绘制后的图像

cv2.waitKey()

cv2.destroyAllWindows()



#### 5)逼近多边形

函数cv2.approxPolyDP()用来构造指定精度的逼近多边形曲线。该函数的语法格式为:

approxCurve = cv2.approxPolyDP(curve,epsilon,closed)

参数:
    curve: 轮廓
    epsilon: 精度,原始轮廓的边界点与逼近多边形边界之间的最大距离
    closed: 布尔类型,该值为True时,逼近多边形是封闭的;否则,逼近多边形是不封闭的
返回值:
    approxCurve: 逼近多边形的点集
 

复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

# 构建多边形,逼近轮廓

import cv2

import numpy as np

im = cv2.imread("../data/cloud.png")

cv2.imshow("im", im)

gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)

# 提取图像轮廓

ret, binary = cv2.threshold(gray, 127255, cv2.THRESH_BINARY)

img, contours, hierarchy = cv2.findContours(binary,

                                            cv2.RETR_LIST,

                                            cv2.CHAIN_APPROX_NONE)

# 精度一

adp = im.copy()

epsilon = 0.005 * cv2.arcLength(contours[0], True)  # 精度,根据周长计算

approx = cv2.approxPolyDP(contours[0], epsilon, True)  # 构造多边形

adp = cv2.drawContours(adp, [approx], 0, (00255), 2)  # 绘制多边形

cv2.imshow("result_0.005", adp)

# 精度二

adp2 = im.copy()

epsilon = 0.01 * cv2.arcLength(contours[0], True)  # 精度,根据周长计算

approx = cv2.approxPolyDP(contours[0], epsilon, True)  # 构造多边形

adp = cv2.drawContours(adp2, [approx], 0, (00255), 2)  # 绘制多边形

cv2.imshow("result_0.01", adp2)

cv2.waitKey()

cv2.destroyAllWindows()

### 7. 视频基本处理

#### 1)读取摄像头

复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

import numpy as np

import cv2

cap = cv2.VideoCapture(0)  # 实例化VideoCapture对象, 0表示第一个摄像头

while cap.isOpened():

    ret, frame = cap.read()  # 捕获帧

    cv2.imshow("frame", frame)

    c = cv2.waitKey(1)  # 等待1毫秒,等待用户输入

    if c == 27:  # ESC键

        break

cap.release()  # 释放摄像头

cv2.destroyAllWindows()


#### 2)播放视频文件
 

复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

import numpy as np

import cv2

cap = cv2.VideoCapture("D:\\tmp\\min_nong.mp4")  # 打开视频文件

while cap.isOpened():

    ret, frame = cap.read()  # 读取帧

    cv2.imshow("frame", frame)  # 显示

    c = cv2.waitKey(25)

    if c == 27:  # ESC键

        break

cap.release()  # 释放视频设备

cv2.destroyAllWindows()

#### 3)捕获并保存视频

复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

import numpy as np

import cv2

""" 编解码4字标记值说明

cv2.VideoWriter_fourcc('I','4','2','0')表示未压缩的YUV颜色编码格式,色度子采样为4:2:0

    该编码格式具有较好的兼容性,但产生的文件较大,文件扩展名为.avi。

cv2.VideoWriter_fourcc('P','I','M','I')表示 MPEG-1编码类型,生成的文件的扩展名为.avi。

cv2.VideoWriter_fourcc('X','V','I','D')表示MPEG-4编码类型。如果希望得到的视频大小为平均值,可以选用这个参数组合。

    该组合生成的文件的扩展名为.avi。

cv2.VideoWriter_fourcc('T','H','E','O')表示Ogg Vorbis编码类型,文件的扩展名为.ogv。

cv2.VideoWriter_fourcc('F','L','V','I')表示Flash视频,生成的文件的扩展名为.flv。

"""

cap = cv2.VideoCapture(0)

fourcc = cv2.VideoWriter_fourcc("I""4""2""0")  # 编解码4字标记值

out = cv2.VideoWriter("output.avi",  # 文件名

            fourcc,  # 编解码类型

            20,  # fps(帧速度)

            (640480))  # 视频分辨率

while cap.isOpened():

    ret, frame = cap.read()  # 读取帧

    if ret == True:

        out.write(frame)  # 写入帧

        cv2.imshow("frame", frame)

        if cv2.waitKey(1) == 27:  # ESC键

            break

    else:

        break

cap.release()

out.release()

cv2.destroyAllWindows()

### 8. 综合案例

#### 1)利用OpenCV实现图像校正

**【任务描述】**

我们对图像中的目标进行分析和检测时,目标往往具有一定的倾斜角度,自然条件下拍摄的图像,完全平正是很少的。因此,需要将倾斜的目标“扶正”的过程就就叫做图像矫正。该案例中使用的原始图像如下:

 

复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

# 图像校正示例

import cv2

import numpy as np

import math

im = cv2.imread("../data/paper.jpg")

gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)

cv2.imshow('im', im)

# 模糊

blurred = cv2.GaussianBlur(gray, (55), 0)

# 膨胀

dilate = cv2.dilate(blurred, (33))

# 检测边沿

edged = cv2.Canny(dilate,  # 原始图像

          30120)  # 滞后阈值、模糊度

# cv2.imshow("edged", edged)

# 轮廓检测

img, cnts, hie = cv2.findContours(edged.copy(),

                   cv2.RETR_EXTERNAL,  # 只检测外轮廓

                   cv2.CHAIN_APPROX_SIMPLE)  # 只保留该方向的终点坐标

docCnt = None

# 绘制轮廓

im_cnt = cv2.drawContours(im,  # 绘制图像

              cnts,  # 轮廓点列表

              -1,  # 绘制全部轮廓

              (00255),  # 轮廓颜色:红色

              2)  # 轮廓粗细

cv2.imshow("im_cnt", im_cnt)

# 计算轮廓面积,并排序

if len(cnts) > 0:

    cnts = sorted(cnts,  # 数据

            key=cv2.contourArea,  # 排序依据,根据contourArea函数结果排序

            reverse=True)

    for c in cnts:

        peri = cv2.arcLength(c, True)  # 计算轮廓周长

        approx = cv2.approxPolyDP(c, 0.02 * peri, True)  # 轮廓多边形拟合

        # 轮廓为4个点表示找到纸张

        if len(approx) == 4:

            docCnt = approx

            break

print(docCnt)

# 用圆圈标记处角点

points = []

for peak in docCnt:

    peak = peak[0]

    # 绘制圆

    cv2.circle(im,  # 绘制图像

          tuple(peak), 10,  # 圆心、半径

          (00255), 2)  # 颜色、粗细

               points.append(peak)  # 添加到列表

print(points)

cv2.imshow("im_point", im)

# 校正

src = np.float32([points[0], points[1], points[2], points[3]])  # 原来逆时针方向四个点

dst = np.float32([[00], [0488], [337488], [3370]])  # 对应变换后逆时针方向四个点

m = cv2.getPerspectiveTransform(src, dst)  # 生成透视变换矩阵

result = cv2.warpPerspective(gray.copy(), m, (337488))  # 透视变换

"""  根据勾股定理计算宽度、高度,再做透视变换

h = int(math.sqrt((points[1][0] - points[0][0])**2 + (points[1][1] - points[0][1])**2)) # 宽度

w = int(math.sqrt((points[2][0] - points[1][0])**2 + (points[2][1] - points[1][1])**2)) # 高度

print("w:", w, " h:", h)

dst = np.float32([[00], [0, h], [w, h], [w, 0]])

m = cv2.getPerspectiveTransform(src, dst)  # 生成透视变换矩阵

result = cv2.warpPerspective(gray.copy(), m, (w, h))  # 透视变换

"""

cv2.imshow("result", result)  # 显示透视变换结果

cv2.waitKey()

cv2.destroyAllWindows()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

面试(opencv) 的相关文章

  • 如何在 CMake Makefile 中包含 OpenCV 库

    我希望你可以帮助我 我有一个简单的 CMakeLists txt 以便在 Leopard 10 5 8 上构建我的项目 我正在使用 CMake 2 8 1 目前这是代码 cmake minimum required VERSION 2 8
  • OpenCV Python 删除图像中的某些对象

    我正在使用带有 opencv 和 numpy 的 python 来检测天文中的星星 例如这个1 https i stack imgur com AKwEJ jpg图片 使用模板匹配 我可以用阈值检测星星 单击 2 2 https i sta
  • 使用 Azure 机器学习检测图像中的符号

    4年前我发帖这个问题 https stackoverflow com q 6999920 411094不幸的是 得到的一些答案超出了我的技能水平 我刚刚参加了一次构建巡演会议 他们在会上谈论了机器学习 这让我想到了使用 ML 来解决我的问题
  • 附加信息:OpenCV:使用 c# 的不同大小的对象

    目前 我的 EmguCV c 代码面临问题 我试图从数据库中识别我的图像 但它不起作用 一旦检测到我的脸 它就会崩溃 然后会出现此错误 附加信息 OpenCV 不同大小的对象 我尝试寻找这个错误 但我一无所知 这是我的代码 Action f
  • 检测骰子的上侧

    是否可以检测骰子的上面 虽然从顶部看这将是一项简单的任务 但从许多角度来看 可以看到多个侧面 Here is an example of a dice feel free to take your own pictures 您通常想知道自己
  • 从索贝尔确定图像梯度方向?

    我正在尝试使用 openCV 的 Sobel 方法的结果来确定图像梯度方向 我知道这应该是一个非常简单的任务 我从此处复制了许多资源和答案中的方法 但无论我做什么 所得方向始终在 0 57 度之间 我希望范围为 0 360 我相信所有的深度
  • Pyinstaller“无法执行脚本 pyi_rth_pkgres”并且缺少软件包

    这是我第一次在这里发布问题 因为我的大部分问题已经被其他人回答了 我正在 python 中开发 GUI 应用程序 并尝试使用 pyinstaller 将其打包到单个文件夹和 exe 中 以便于移植 目前 我使用 Windows 10 和 a
  • 如何获得垂直线穿过的完整内轴线?

    我有一个图像 我想获取穿过其中轴的像素 我尝试使用骨架化 and 中轴方法来获取它们 但这两种方法都返回比相应对象短的一维线 这是带有示例图像的代码 gt gt gt import skimage filter gt gt gt impor
  • 将线性数组转换为二维矩阵

    我有一个浮点指针 数组 它代表一个图像 它的元素计数和索引具有宽度 高度 图像不像矩阵 其原点位于左上角 相反 它的原点位于左下角 就像在笛卡尔坐标系中一样 达到最大宽度后 它从左侧开始下一行 所以我想有效地将 这个数组转换为二维矩阵 可选
  • 在 Android 中使用 OpenCV 查找图像匹配

    我正在尝试构建一个 Android 应用程序 该应用程序可以比较设备相机拍摄的照片 以在一组图像中找到匹配项 我已经在 Android Studio 上配置了 OpenCV 但仅此而已 有人可以通过链接到资源或建议教程来提供帮助吗 Open
  • 使用 OpenCV VideoWriter 将 RTSP 流存储为视频文件

    我正在使用 OpenCV 开发一个 Python 模块 该模块连接到 RTSP 流以对视频执行一些预处理 主要是降低 fps 和分辨率 然后将其存储在文件系统中 但是 即使在尝试了几种编解码器 寻找类似的开发之后 我总是得到一个空的视频 我
  • 使用 SURF 在检测到的对象周围绘制矩形

    我正在尝试从涉及冲浪检测器的以下代码中检测对象 我不想绘制匹配项 我想在检测到的对象周围绘制一个矩形 但不知何故我无法获得正确的单应性 请任何人指出在哪里我走错了 include
  • OpenCV Python RTSP 流

    我想使用 RTSP 从 IP 摄像机流式传输视频 但我有一个问题 我已经安装了先决条件 而且我的 RTSP 链接可以在 VlC 播放器上运行 但是当我在编辑器中尝试并运行它时 它说找不到相机 这是我的代码 import cv2 import
  • Opencv 运动检测与跟踪

    我需要在网络摄像头的视频帧中进行强大的运动检测和跟踪 背景总是一样的 目的是识别物体的位置 如果可能的话没有阴影 但并不急于去除阴影 我已经尝试过用于背景减法和阈值化的opencv算法 但这仅取决于一个图像作为背景 如果背景的亮度 或相机自
  • 在 Python 中使用音频流 RTMP 通过管道和 OpenCV 到 FFmpeg

    我正在尝试使用音频流式传输 FFmpeg 我将在下面展示我的代码 导入模块 import subprocess as sp 创建变量 rtmpUrl rtmp a rtmp youtube com live2 key camera path
  • python openCV 中的人口普查变换

    我开始在一个与立体视觉相关的项目中使用 openCV 和 python 我找到了关于使用 openCV 在 C 中进行人口普查转换的文档页面 link http docs opencv org 3 1 0 d2 d7f namespacec
  • 从凸点获取角点

    我编写了算法来提取图像中显示的点 它们形成凸形 我知道它们的顺序 如何从这些点中提取角点 顶部 3 个和底部 3 个 我正在使用opencv 如果你已经有了物体的凸包 并且该包包含角点 那么你需要做的就是简化包直到它只有 6 个点 有很多方
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 线程“main”java.lang.UnsatisfiedLinkError中出现异常:java.library.path中没有opencv_java249

    我目前正在尝试在我的 32 位笔记本电脑上设置 OpenCV 但我不断收到一条令我困惑的错误消息 Exception in thread main java lang UnsatisfiedLinkError no opencv java2

随机推荐

  • 服务器采购和选型

    1 CPU 双路CPU xff0c 0号位和1号位 xff0c 只要0号位CPU正常 xff0c 服务器就能工作 xff0c 若1号位CPU故障 xff0c 服务器会报警 若0号位CPU故障 xff0c 1号位CPU正常 xff0c 服务器
  • CentOS 7自定义系统服务(以Phoebus-Olog为例)

    需要开启的服务 xff1a MongoDBElasticSearchPhoebus Olog后端服务Phoebus Olog web client前端服务 配置系统服务的方式 xff1a systemd 把spring boot项目配置为L
  • 在未联网的计算机中部署 yum 源和 EPICS 环境

    1 基本背景 EPICS 软件仓库 xff1a 192 168 206 234 8888 安装方式 xff1a yum 2 配置跳板机 跳板机功能 xff1a 借助ssh 隧道服务进行端口转发 xff0c 使未联网的计算机能够访问软件仓库
  • 在未联网计算机中部署Archiver Appliance(以Rocky Linux 8系统为例)

    由于计算机未联网 xff0c 而利用 epicsarchiverap env 工具进行安装的过程中需要一些联网下载安装包的操作步骤 xff0c 因此以下会给出相应的解决方法 总体思路就是 xff1a 对于一般性网址如 GitHub 等 xf
  • CentOS 7 / Rocky Linux 8 / Windows 10 系统启动 Chrony/NTP 服务

    本文内容 背景介绍1 Chrony NTP 的联系与区别2 关于 Chrony NTP 服务端 客户端的概念3 Chrony 核心组件 CentOS 7 Rocky Linux 8 系统启动 Chrony 服务1 服务状态查询2 服务配置3
  • 前端基础知识——CSS

    CSS CSS 基于 HTML 中的父子元素思想 CSS 有很多类似 Word 的排版功能 xff08 颜色 字体 文字环绕等 xff09 的属性 相关语法说明 xff1a 基本语法 xff1a 选择器 span class token p
  • GitLab的使用

    简介 xff1a Git xff0c GitHub与GitLab有什么区别 xff1f 官方网站 xff1a https docs gitlab com ee topics git 常用命令和使用方式 xff1a 看完这篇还不会用Git x
  • Archiver Appliance 事务处理流程

    当 Archiver Appliance 开始运行后发生了什么 xff1a mgmt服务 xff1a config DefaultConfigService java span class token function initialize
  • Archiver Appliance 建立集群时可能出现的问题

    0 背景知识 AA 集群中的各个节点 xff0c 完全是分布式结构 xff0c 并不存在主从关系 各个节点共享完全相同的 xff1a PVTypeInfo 数据库表PV查询权限和结果 xff08 在某一节点上查询所有 PV xff0c 也能
  • 关于python的新特性函数注释(定义函数时使用“:”及“ ->”符号)

    刷题的时候发现有的题目函数定义格式类型是这样的 xff1a def lengthOfLongestSubstring self s str gt int 这种定义方式完全没明白啥意思 xff0c 于是经过一番查找 xff0c 大体意思如下
  • Rocky Linux 8 安装实时内核

    方法一 xff1a yum 安装 在 etc yum repos d 目录下新建一个Rocky8 rt repo安装rt内核和相关工具 span class token function sudo span yum span class t
  • ununtu docker

    移除老版本 Docker sudo apt get remove docker docker engine docker io containerd runc 1 Tips xff1a 如果第一步你这里报了如下错误 xff1a E Coul
  • 如何确认当前使用的.net 版本 及 C# .net VS 版本之间的对应关系

    如何确认当前使用的 net 版本 及 C net VS 版本之间的对应关系 方法1 打开此电脑 xff0c 在地址栏中输入 systemroot Microsoft Net Framework 现在看到的就是目前使用的 net 版本 方法2
  • nuxt 获取不到localStorage,使用cookie持久化

    nuxt项目中在store和plugins的js文件里使用localStorage会报错 解决方案 xff1a 1 安装 cookie universal nuxt span class token function npm span i
  • 数据库连接报错提示connection is being used

    数据库连接报错 xff1a connection is being used 解决办法 xff1a 1 在已经保存的连接上上编辑 xff0c 测试连接成功 xff0c 但是点击连接就会一直提示 connection is being use
  • VsCode中git路径的设置(window系统)

    VsCode中git路径的设置 xff08 window系统 xff09 首先电脑里已经安装好了git并已经把git添加到环境变量中去了 xff08 这有部分在之前的帖子中有讲过 xff09 找到你的电脑里的git路径 先找到你的git安装
  • Qt报错汇总

    1 DirectShowPlayerService doRender Unresolved error code 0x80040266 IDispatch error 102 使用Qt的MediaPlayer控件时报的错 原因 xff1a
  • ubuntu18.04 ros 安装 gazebo9

    三 Gazebo安装 如果前面安装ros 的时候安装了gazebo 这里进行卸载 xff08 1 xff09 sudo apt get remove gazebo xff08 2 xff09 sudo apt get remove libg
  • CMake 常用总结一:CMake 单个文件目录

    引言 CMake 实践帮助我们对 CMake 有一个系统全面的了解 xff0c 并且有大量示例以供参考 xff0c 至少在实际项目中可以让我们有能力看懂并修改项目中现有的 CMake 阅读完 CMake 实践文档 xff0c 认为自己的任务
  • 面试(opencv)

    作者 xff1a 孙兔子 xff08 本人 xff09 链接 xff1a 面试题 xff08 opencv xff09 讨论帖 牛客网 来源 xff1a 牛客网 12 xff09 形态学梯度 复制代码 1 2 3 4 5 6 7 8 9 1