小编xpr*_*edo的帖子

从具有对象的框的图像中提取对象

我有一个盒子,从前面透明,我将相机放在前面的透明面板上捕捉内部的图像,大多数时候盒子是空的,但是假设有人在这个盒子里面放了一个物体,那么我必须只从捕获的图像中提取此对象.

(我的真正目的是识别放置在盒子内的物体,但第一步是提取物体,然后提取特征以生成训练模型,现在我只专注于从图像中提取物体)

我是OpenCV的新手,并且在Python中使用它,我找到了一些可以帮助我的OpenCV函数.

  • GrabCut,这对我来说很完美,我能够只提取对象,前提是我在对象上标记矩形,但是对象可以在框内的任何位置,因此无法绘制对象的确切大小矩形,如果有办法,请建议我.
  • 图像的差异,因为我有空腔盒图像,当对象存在时,我可以使用cv2.absdiff函数来计算图像之间的差异,但这在大多数情况下不能正常工作,因为它使用像素通过像素差异计算,由于这个结果很奇怪,加上光线条件的变化也很难.
  • Back Ground Subtraction,我在这里看了几篇帖子,看起来这就是我需要的,但我得到的例子是视频,我不明白如何让它只用两个图像,一个空盒子和另一个用宾语.

背景减法的代码如下,即使短距离也不能正常工作

cap = cv2.VideoCapture(0)
fgbg = cv2.createBackgroundSubtractorMOG2()
fgbg2 = cv2.createBackgroundSubtractorKNN()

while True:
    ret, frame = cap.read()
    cv2.namedWindow('Real', cv2.WINDOW_NORMAL)
    cv2.namedWindow('MOG2', cv2.WINDOW_NORMAL)
    cv2.namedWindow('KNN', cv2.WINDOW_NORMAL)
    cv2.namedWindow('MOG2_ERODE', cv2.WINDOW_NORMAL)
    cv2.namedWindow('KNN_ERODE', cv2.WINDOW_NORMAL)
    cv2.imshow('Real', frame)
    fgmask = fgbg.apply(frame)
    fgmask2 = fgbg2.apply(frame)
    kernel = np.ones((3,3), np.uint8)
    fgmask_erode = cv2.erode(fgmask,kernel,iterations = 1)
    fgmask2_erode = cv2.erode(fgmask2,kernel,iterations = 1)

    cv2.imshow('MOG2',fgmask)
    cv2.imshow('KNN',fgmask2)
    cv2.imshow('MOG2_ERODE',fgmask_erode)
    cv2.imshow('KNN_ERODE',fgmask2_erode)
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break
cap.release()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

任何人都可以请帮助这个主题,以及如何修改上面的代码只是使用这两个图像,当我尝试我得到空白图像.提前致谢

来自相机的样本图像如下:(我使用800万像素相机,这就是为什么图像尺寸很大,我减小了尺寸,然后在这里上传)

空盒子

对象1

对象2

python opencv image-processing

5
推荐指数
1
解决办法
4754
查看次数

使用matplotlib和python绘制datetime.timedelta

我正在执行一项任务,我需要计算每天花费的时间,然后使用条形图表示该时间,因此对于此任务,我使用python并能够获取每天花费的时间,并将其存储在列表中“ time_list”,现在我不明白如何使用matplotlib函数进行绘制。问题在于,此列表包含datetime.timedelta类值。例:

time_list
[datetime.timedelta(0, 23820), datetime.timedelta(0, 27480), datetime.timedelta(0, 28500), datetime.timedelta(0, 24180), datetime.timedelta(0, 27540), datetime.timedelta(0, 28920), datetime.timedelta(0, 28800), datetime.timedelta(0, 29100), datetime.timedelta(0, 29100), datetime.timedelta(0, 24480), datetime.timedelta(0, 27000)]
Run Code Online (Sandbox Code Playgroud)

这些值的含义如下:

Total Time Spent on  2  is  6:37:00
Total Time Spent on  3  is  7:38:00
Total Time Spent on  4  is  7:55:00
Total Time Spent on  5  is  6:43:00
Total Time Spent on  8  is  7:39:00
Total Time Spent on  9  is  8:02:00
Total Time Spent on  10  is  8:00:00
Total Time Spent on  11 …
Run Code Online (Sandbox Code Playgroud)

python plot matplotlib

2
推荐指数
2
解决办法
2215
查看次数

标签 统计

python ×2

image-processing ×1

matplotlib ×1

opencv ×1

plot ×1