想要单独对图像在HSV颜色空间下的色相分量或饱和度分量进行分析处理,应当调用什么函数?(对象是整幅图范围,不是单个像素点的hsv分量)
iluw 发布的帖子
-
如何将图像从RGB颜色空间转换到HSV或HSI颜色空间?
-
关闭白平衡和自动增益后,改变光源的亮度却还是会被自动校正平衡。如何彻底关闭白平衡和自动增益?
简单的成像代码如下:
import sensor, image, time sensor.reset() # Reset and initialize the sensor. sensor.set_pixformat(sensor.RGB565) # Set pixel format to RGB565 (or GRAYSCALE) sensor.set_framesize(sensor.XGA) # Set frame size to QVGA (320x240) sensor.set_auto_gain(False) #关闭相机自动增益 sensor.set_auto_whitebal(False) #关闭相机自动白平衡 sensor.skip_frames(time = 2000) # Wait for settings take effect. clock = time.clock() # Create a clock object to track the FPS. while(True): clock.tick() # Update the FPS clock. img = sensor.snapshot() # Take a picture and return the image. img.lens_corr(1.3) print(clock.fps()) # Note: OpenMV Cam runs about half as fast when connected # to the IDE. The FPS should increase once disconnected.
-
image.binary()如何设定mask参数?
image.binary(thresholds[, invert=False[, zero=False[, mask=None[, to_bitmap=False[, copy=False]]]]])
以上函数中的mask是如何设定的?mask=?
-
RE: 有什么方法去设定二维倾斜的矩形区域为感兴趣区域
@kidswong999
image.binary()需要以颜色阈值范围作为判断标准,我的“最终检测色块”的颜色变化范围较大,可能和标准颜色区的某个标准色块颜色相近,这样可能会出现误把“最终检测色块”也包含进某个标准色块对应生成的mask里的情况,成为干扰因素。我想给每个标准色块和二维码设定ROI的初衷是尽量避免干扰因素,提高精确度。 -
RE: 有什么方法去设定二维倾斜的矩形区域为感兴趣区域
我的思路是第一步:利用find_blobs()去识别右侧蓝色圆点,然后利用blob.roundness()圆点筛选,再利用blob.enclosing_circle()去返回其中心坐标,于是得到中心点坐标,通过计算也可以得到这整个图像的倾斜角度;第二步:根据得到的坐标去分别给左侧标准颜色区与中间二维码区设定一个ROI。但是实际情况检测对象可能是倾斜一定角度的,左侧标准颜色区因面积限制排列紧凑,普通(x,y,w,h)可能导致某个ROI错误扩展到相邻的色块上,导致我获取的区域像素颜色信息出现干扰。第三步:根据标准颜色区的颜色信息作为“最终检测色块区”的环境偏差修正参数,从而获取最终检测色块区的颜色信息。
所以我想,如果可以自己根据算出来的每个色块的四角坐标(与定位块的相对位置是固定的)与倾斜角度去设定一个与对象倾斜角度相同的ROI就好了。
或者已知倾斜角后,把图像反向水平旋转矫正后再去设定ROI就可以避免倾斜ROI扩展到其他色块上了。 -
RE: 有什么方法去设定二维倾斜的矩形区域为感兴趣区域
感谢指点,但是上面的红色块目标只是举例, 我想设定的感兴趣区域并不是以已知对象位置为前提,而是以我想设定的感兴趣区域的四角坐标与倾斜角度为已知。(已知信息是由大目标上的定位块计算出的,根据相对坐标差与倾斜角去定位大目标上的小目标的大概位置)也就是想要实现的不是“识别”、而是“设定”,设定一个倾斜的感兴趣区域。
-
有什么方法去设定二维倾斜的矩形区域为感兴趣区域
举例:目标是红色块,但是其倾斜一定角度。我想设定感兴趣区域为黑色矩形框范围(图像本身是无黑色矩形框的,这里是为展示清晰),黑色矩形框四角坐标与长、宽已知。
我能想到的解决方法有两个:1.算出目标的旋转角度,然后将图像整个旋转一定角度后,设定(x,y,w,h);2.有没有什么可以直接匹配出倾斜矩形框,然后调用设定为感兴趣区域的。但是roi=(x,y,w,h)嘛,不明白倾斜状态下如何设定w和h。
请教各位大佬指点指点。 -
模板匹配的find_template()函数多次调用会报错问题?
import time, sensor, image from image import SEARCH_EX, SEARCH_DS #从imgae模块引入SEARCH_EX和SEARCH_DS。使用from import仅仅引入SEARCH_EX, #SEARCH_DS两个需要的部分,而不把image模块全部引入。 sensor.reset() #相机初始化 sensor.set_contrast(1) #设置相机对比度 sensor.set_framesize(sensor.FHD) #设置相机分辨率 #sensor.set_windowing(((640-80)//2, (480-60)//2, 80, 60)) #设置视窗分辨率 sensor.set_pixformat(sensor.GRAYSCALE) #设置灰度模式 sensor.set_auto_gain(False) #关闭相机自动增益 sensor.set_auto_whitebal(False) #关闭相机自动白平衡 sensor.set_auto_exposure(False, \ exposure_us = 80000) #设置曝光时间 # Load template. # Template should be a small (eg. 32x32 pixels) grayscale image. template = image.Image("/L.pgm") #加载模板图片 while (True): img = sensor.snapshot() #相机采图 img.lens_corr(1.8) #相机畸变矫正 img.draw_rectangle((0,540,960,540), color=(0,255,0)) # find_template(template, threshold, [roi, step, search]) r1 = img.find_template(template, 0.70, roi=(0,540,960,540), step=4, search=SEARCH_EX) if r1: img.draw_rectangle(r1,color=(255,0,0)) print(r1[0]+r1[2]/2, r1[1]+r1[3]/2) r2 = img.find_template(template, 0.70, roi=(960,540,960.540), step=4, search=SEARCH_EX) if r2: img.draw_rectangle(r2,color=(255,0,0)) print(r2[0]+r2[2]/2, r2[1]+r2[3]/2) r3 = img.find_template(template, 0.70, roi=(960,0,960.540), step=4, search=SEARCH_EX) if r3: img.draw_rectangle(r3) print(r3[0]+r3[2]/2, r3[1]+r3[3]/2)
运行会出现报错问题,定位在了第二次调用find_template()函数位置。尝试了三个find_template()单独调用运行,单独运行第一个正常,第二、三个会报错。
请问有没有同样问题已经解决的分享一下解决办法。 -
报错:TypeError: NoneType' object isn't callable
目的:设定右半边图像为感兴趣区域,进行颜色识别,判断是否存在与阈值匹配的像素点
问题:采图范围无目标时无事发生,一旦采图范围内进入了与阈值匹配的物体,IDE就会立马报错,如图import sensor, image, time, network, usocket, sys, math, pyb C_thresholds =[(12, 41, 44, 23, 34, -11)] #C线识别的阈值 #T_thresholds =[(16, 54, -10, 28, -29, 2)] #T线识别的阈值 sensor.reset() #相机初始化 #sensor.set_contrast(1) #设置相机图像对比度(-3,+3) #sensor.set_brightness(1) #设置相机图像亮度(-3,+3) #sensor.set_saturation(1) #设置相机图像饱和度(-3,+3) #sensor.set_gainceiling(16) #设置相机图像增益上限(2、4、8、16、32、64、128) sensor.set_pixformat(sensor.RGB565) #设置彩色模式 sensor.set_framesize(sensor.VGA) #设置相机分辨率 sensor.skip_frames(time = 2000) #延时2s sensor.set_auto_gain(False) #关闭相机自动增益 sensor.set_auto_whitebal(False) #关闭相机自动白平衡 right_roi= [320,0,320,480] left_roi = [0,0,320,480] while(True): img = sensor.snapshot() for blob in img.find_blobs(C_thresholds, roi=right_roi, x_stride=2, y_stride=1, invert=False, area_threshold=4, pixels_threshold=4, merge=True, margin=1, threshold_cb=None, merge_cb=None): if blob.pixels() > 10: print("试纸检测成功!") img.draw_edges(blob.min_corners(), color=(255,0,0)) img.draw_line(blob.major_axis_line(), color=(0,255,0)) img.draw_line(blob.minor_axis_line(), color=(0,0,255)) #img.draw_rectangle(blob.rect()) #img.draw_cross(blob.cx(), blob.cy()) #img.draw_keypoints([(blob.cx(), blob.cy(), int(math.degrees(blob.rotation())))], size=20) else: print("未检测到试纸!")
-
Color-Tracking->multi_color_blob_tracking多颜色跟踪中能否去掉打印帧率和时钟?
Color-Tracking->multi_color_blob_tracking多颜色跟踪中的clock = time.clock()、clock.tick()都只是为了实现函数print(clock.fps())吗?如果我只是拍一张照片进行色块查找,是不是就不用打印帧率,也就不用写上面这些了?
代码导航:https://book.openmv.cc/example/10-Color-Tracking/multi-color-blob-tracking.html