Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 108,485

HOME > กระทู้สำหรับภาษาต่าง ๆ > ขอสอบถามผู้รู้ด้าน OpenCV /python/Image Processing ครับอยากให้โปรแกรมนับจำนวนวัตถุที่ detect ได้ต้องทำอย่างไร



ขอสอบถามผู้รู้ด้าน OpenCV /python/Image Processing ครับอยากให้โปรแกรมนับจำนวนวัตถุที่ detect ได้ต้องทำอย่างไร

 
Topic : 132491



โพสกระทู้ ( 13 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook


เนื่องจากผมกำลังทำโปรเจคด้าน Image Processing โดยใช้ OpenCV version 3.4.3+contibute ภาษาที่ใช้ python version 3.6 GUI เป็น PyQt5 ครับ แต่ผมติดปัญหาที่ว่าผมจะให้มันนับวัตถุที่กล้องมัน detection ได้ยังไงครับ ผมทำเป็นแบบ Real-Time ผ่านกล้อง Webcam ครับ โดยโปรเจคที่ผมทำคือโปรเจคนับจำนวนพริกและคัดแยกตามสี ประมาณว่าถ้าใน frame นั้นมีพริกสีแดงจำนวน 5 เมล็ดก็ให้แสดงค่าว่า Red count : 5 ใน GUI ที่ผมสร้างประมาณนี้ครับ ตอนนี้ Detect แบบ Multi color ได้อย่างเดียวครับโดยใช้ค่าสี hsv แต่ยังนับไม่ได้ (รูปที่แนบไปเป็นรูป GUI ที่ผมทำครับ) ก็เลยอยากสอบถามท่านผู้รู้หรือผู้เชี่ยวชาญด้านนี้หน่อยครับว่าผมต้องเขียนประมาณไหนหรือเขียนแบบไหน โค้ดที่ผมเขียน ณ ตอนนี้ที่มัน detect ได้ตามด้านล่างเลยครับ >>


import sys

import cv2
from PyQt5.QtCore import QTimer
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtWidgets import QDialog, QApplication
from PyQt5.uic import loadUi
import numpy as np



def cnt_count(args):
pass


class Life2Coding(QDialog):
def __init__(self):
super(Life2Coding,self).__init__()
loadUi('life2coding.ui',self)
self.image=None
self.startButton.clicked.connect(self.start_webcam)
self.stopButton.clicked.connect(self.stop_webcam)

self.trackButton.setCheckable(True)
self.trackButton.toggled.connect(self.track_webcam_color)
self.track_Enabled=False

self.color1_Button.clicked.connect(self.setColor1)
self.color2_Button.clicked.connect(self.setColor2)
self.color3_Button.clicked.connect(self.setColor3)



def track_webcam_color (self, status):
if status:
self.track_Enabled = True
self.trackButton.setText('Stop Tracking')
else:
self.track_Enabled = False
self.trackButton.setText('Track Color')

def setColor1(self):
self.color1_lower = np.array([self.hMin_2.value(),self.sMin_2.value(), self.vMin_2.value()], np.uint8)
self.color1_upper = np.array([self.hMax_2.value(), self.sMax_2.value(), self.vMax_2.value()], np.uint8)

self.color1_Label.setText('Min :'+str(self.color1_lower)+' Max :'+str(self.color1_upper))

def setColor2(self):
self.color2_lower = np.array([self.hMin_2.value(),self.sMin_2.value(), self.vMin_2.value()], np.uint8)
self.color2_upper = np.array([self.hMax_2.value(), self.sMax_2.value(), self.vMax_2.value()], np.uint8)

self.color2_Label.setText('Min :'+str(self.color2_lower)+' Max :'+str(self.color2_upper))

def setColor3(self):
self.color3_lower = np.array([self.hMin_2.value(),self.sMin_2.value(), self.vMin_2.value()], np.uint8)
self.color3_upper = np.array([self.hMax_2.value(), self.sMax_2.value(), self.vMax_2.value()], np.uint8)

self.color3_Label.setText('Min :'+str(self.color3_lower)+' Max :'+str(self.color3_upper))




def start_webcam(self):
self.capture=cv2.VideoCapture(0)
self.capture.set(cv2.CAP_PROP_FRAME_HEIGHT,481)
self.capture.set(cv2.CAP_PROP_FRAME_WIDTH,541)

self.timer=QTimer(self)
self.timer.timeout.connect(self.update_frame)
self.timer.start(5)

def update_frame(self):
ret,self.image=self.capture.read()
self.image=cv2.flip(self.image,1)
self.displayImage(self.image,1)

hsv = cv2.cvtColor(self.image,cv2.COLOR_BGR2HSV)

color_lower = np.array([self.hMin_2.value(),self.sMin_2.value(), self.vMin_2.value()], np.uint8)
color_upper = np.array([self.hMax_2.value(), self.sMax_2.value(), self.vMax_2.value()], np.uint8)

color_mask = cv2.inRange(hsv,color_lower,color_upper)
self.displayImage(color_mask,2)

if (self.track_Enabled and (self.color1_Check.isChecked() or self.color2_Check.isChecked() or self.color3_Check.isChecked())):
trackedImage = self.track_colored_object(self.image.copy())
self.displayImage(trackedImage,1)
else:
self.displayImage(self.image,1)

def track_colored_object(self,img):
blur = cv2.blur(img,(3,3))
hsv = cv2.cvtColor(blur,cv2.COLOR_BGR2HSV)

if self.color1_Check.isChecked():
color_mask = cv2.inRange(hsv, self.color1_lower, self.color1_upper)

erode = cv2.erode(color_mask, None, iterations=2)
dilate = cv2.dilate(erode, None, iterations=10)

kernelOpen = np.ones((5, 5))
kernelClose = np.ones((20, 20))

maskOpen = cv2.morphologyEx(dilate, cv2.MORPH_OPEN, kernelOpen)
maskclose = cv2.morphologyEx(maskOpen, cv2.MORPH_CLOSE, kernelClose)

print('Count :', cnt_count)

(_, contours, hierachy) = cv2.findContours(maskclose, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)


for cnt in contours:
area = cv2.contourArea(cnt)
if (area > 5000):
x, y, w, h = cv2.boundingRect(cnt)
img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)
cv2.putText(img, 'Color 1 Detected', (x, y), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
str_count = 'UP: ' + str(cnt_count)


if self.color2_Check.isChecked():
color_mask = cv2.inRange(hsv, self.color2_lower, self.color2_upper)

erode = cv2.erode(color_mask, None, iterations=2)
dilate = cv2.dilate(erode, None, iterations=10)

kernelOpen = np.ones((5, 5))
kernelClose = np.ones((20, 20))

maskOpen = cv2.morphologyEx(dilate, cv2.MORPH_OPEN, kernelOpen)
maskclose = cv2.morphologyEx(maskOpen, cv2.MORPH_CLOSE, kernelClose)

(_, contours, hierachy) = cv2.findContours(maskclose, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

for cnt in contours:
area = cv2.contourArea(cnt)
if (area > 5000):
x, y, w, h = cv2.boundingRect(cnt)
img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)
cv2.putText(img, 'Color 2 Detected', (x, y), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)


if self.color3_Check.isChecked():
color_mask = cv2.inRange(hsv, self.color3_lower, self.color3_upper)

erode = cv2.erode(color_mask, None, iterations=2)
dilate = cv2.dilate(erode, None, iterations=10)

kernelOpen = np.ones((5, 5))
kernelClose = np.ones((20, 20))

maskOpen = cv2.morphologyEx(dilate, cv2.MORPH_OPEN, kernelOpen)
maskclose = cv2.morphologyEx(maskOpen, cv2.MORPH_CLOSE, kernelClose)

(_, contours, hierachy) = cv2.findContours(maskclose, cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)

for cnt in contours:
area = cv2.contourArea(cnt)
if (area > 5000):
x, y, w, h = cv2.boundingRect(cnt)
img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)
cv2.putText(img, 'Color 3 Detected', (x, y), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 0, 0), 2)

return img


def stop_webcam(self):
self.timer.stop()


def displayImage(self,img,window=1):
qformat=QImage.Format_Indexed8
if len(img.shape)==3 : #[0]=rows , [1]=cols , [2]=channels
if img.shape[2]==4 :
qformat=QImage.Format_RGBA8888
else:
qformat=QImage.Format_RGB888

outImage=QImage(img,img.shape[1],img.shape[0],img.strides[0],qformat )
#BGR>>RGB
outImage=outImage.rgbSwapped()
if window==1:
self.imgLabel.setPixmap(QPixmap.fromImage(outImage))
self.imgLabel.setScaledContents(True)
if window==2:
self.processedLabel.setPixmap(QPixmap.fromImage(outImage))
self.processedLabel.setScaledContents(True)



if __name__=='__main__':
app = QApplication(sys.argv)
window = Life2Coding()
window.setWindowTitle('Chilli Tracking')
window.show()
sys.exit(app.exec_())




test



Tag : Python


Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2018-11-04 02:12:19 By : dev_tae View : 1252 Reply : 1
 

 

No. 1



โพสกระทู้ ( 8,730 )
บทความ ( 2 )



สถานะออฟไลน์


python ใช้ tag php ครอบ ครับ อย่างน้อยจะได้ เห็น indent ที่แตกต่าง แสดงมาแบบนี้ งงครับ
language tag
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2018-11-04 20:49:02 By : Chaidhanan
 


   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ขอสอบถามผู้รู้ด้าน OpenCV /python/Image Processing ครับอยากให้โปรแกรมนับจำนวนวัตถุที่ detect ได้ต้องทำอย่างไร
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: Voake, Comcube, รับทำเว็บไซต์ รับเขียนโปรแกรม , รับทำบัญชี , โรงงานผลิตครีม , สำนักงานบัญชี , รับจดทะเบียนบริษัท , Pangpond , รถมือสอง

Load balance : Server 03
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2020 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่