打开CV:根据奶牛的体型识别奶牛

2024-09-30 05:15:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我想根据奶牛的体型来识别它。我正在尝试使用模板匹配,因为我可以收集数据,相机是相当稳定的,以及奶牛的位置。然而,结果并不完美,因为我认为匹配也包括背景。奶牛的示例如下所示:

cow

背景或多或少是静态的:

Background

我尝试过简单的减法,但结果很糟糕,我认为这是因为背景有相似的像素值。我得到的减法输出示例如下:

Example

为了简单起见,我想继续使用模板匹配进行识别。我使用下面的代码得到okayish结果,它没有预处理或过滤。我相信有办法提高我的成绩。我尝试过不同类型的阈值处理,但效果没有那么好,我再次认为问题出在太阳上

import cv2
import os
import numpy as np
cap = cv2.VideoCapture('Cow data/cow5/cow5.mp4')

while (cap.isOpened()):
      ret, frame = cap.read()
      img_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

template = cv2.imread('Cow data/cow5/Cow5.jpg', 0)
w, h = template.shape[::-1]

threshold = 0.7
loc = np.where(res >= threshold) #or res1 >= threshold)# or res2>= threshold)## or res3>= threshold)
for pt in zip(*loc[::-1]):
    cv2.rectangle(frame, pt, (pt[0] + w, pt[1] + h), (0, 255, 255), 25)

cv2.imshow('Detected', frame)
cv2.imshow('Other', img_gray)

if cv2.waitKey(1) & 0xFF == ord('c'):
    cv2.imwrite('Saved cows/Cow1/Cow1_extra'+str(save)+'.jpg', frame)
    save+=1

if cv2.waitKey(1) & 0xFF == ord('q'):
    break

cv2.waitKey(0)
cap.release()
cv2.destroyAllWindows()

我想知道隔离母牛的最好方法是什么。我试过grabcut,但效果很差,速度也很慢。改进结果的最佳方法是什么?我应该做什么样的预处理

我对图像处理非常陌生,我希望避免更复杂的图像处理,如使用surf进行特征提取等

任何建议都将不胜感激


Tags: orimport模板pt示例thresholdnpcv2

热门问题