基于OpenMV平台:
1.获取图像
2.利用最大类间方差法进行图像二值化
3.对图像中面积大于阈值的物体进行标注
试验结果示意图:
试验代码:
import sensor, image, time, math, pyb
GRAYSCALE_THRESHOLD = [(0, 64)]
ROIS = [0, 0, 160, 120]
most_pixels = 500
led = pyb.LED(3) # Red LED = 1, Green LED = 2, Blue LED = 3, IR LEDs = 4.
def senser_init(): # 摄像头传感器初始化函数
sensor.reset() # Initialize the camera sensor.
sensor.set_pixformat(sensor.GRAYSCALE) # use grayscale.
sensor.set_framesize(sensor.QQVGA) # use QQVGA for speed.
sensor.skip_frames(30) # Let new settings take affect.
sensor.set_auto_gain(True) # must be turned off for color tracking
sensor.set_auto_whitebal(True) # must be turned off for color tracking
return;
def hardware_init():
led.on() #亮灯
time.sleep(100) #延时150ms
led.off() #暗灯
time.sleep(100)
return;
def Maximum_interclass_variance_method(grayFrame):
w = 0
avgValue = 0
t = 0
maxVariance = 0
statistics_data = grayFrame.get_statistics()
u = statistics_data.mean()
histogram_data = grayFrame.get_histogram() #获取灰度直方图
histogram_bins = histogram_data.bins() #获取灰度直方图的列表
for i in range(len(histogram_bins)):
w += (histogram_bins[i]+0.0000001)
avgValue += i * (histogram_bins[i]+0.0000001)
t = avgValue/w - u
variance = t * t * w /(1 - w)
if(variance > maxVariance):
maxVariance = variance;
threshold = i;
return threshold
#主函数
hardware_init();
senser_init();
while(True):
img = sensor.snapshot()
h = Maximum_interclass_variance_method(img);
GRAYSCALE_THRESHOLD =[(0, h)]
blobs = img.find_blobs(GRAYSCALE_THRESHOLD, roi=ROIS[0:4], merge=True)
if blobs:
for i in range(len(blobs)):
if blobs[i].pixels() > most_pixels:
img.draw_rectangle(blobs[i].rect())