我在python
上使用openCV
正在运行Raspberry-Pi
计划。
我非常怀疑OpenCV Error
。它看起来一定不会发生,但确实发生了。
简而言之,mask
cv2.inRange()
被image
歪曲的情况与images
相同。
mask
处理到mask
并计算其准确性。mask
没有聚集在(1.)中,这意味着image
的{{1}}全部为黑色(空)np.array
,则会跳过{exception: Value Error
的迭代1}}
命令。(因为代码中的min(empty np.array)
Value Error
。)我已经超过两周了OpenCV Error
。这是因为代码中的某些parameters
被赋予了错误的值。此paramters
主要根据mask
裁剪的image
计算得出。所以我在迭代过程中保存了所有image
和mask
s。并且发现mask
9th iteration
问题是当我厌倦了在我的labtop上手动裁剪mask
同一9 th image
时,它没有mask
这意味着只有空(黑色)mask
。但是在mask
的迭代运行中,有一个非常小的Raspberry-Pi
(白色区域)。
我已经检查过labtop和R-Pi
中的文件是否存在差异,但两者都相同。
这是images
:
首先是输入图像以生成Real
实例。第二个是手动创建的mask
。 Thired在mask
中自动创建R-Pi
。
pc和R-Pi
之间的区别仅在于:当我在pc中手动运行代码时,我使用了来自image.jpg
的已保存SDcard of R-Pi
。当代码在R-Pi
迭代运行时,image
直接从R-pi camera module V2
我知道这很奇怪,许多人会认为代码中存在拼写错误或错误。但是过去两周我一直在为这个问题而受苦。我需要关于这类问题的任何线索。
是否有任何可能的情况从openCV
或R-pi
中的相同代码收集到不同的结果?
这是代码的一部分。 Real
实例在循环中迭代创建。发生的行OpenCV Error
标有#
。如果有人要求,我会上传更多。上传完整代码有点长。
class Real:
__ob_low=np.array([25,100,50]) #27,65,100]) /25,100,50
__ob_high=np.array([33,255,255]) #[45,255,255]) /33,255,255
def __opening(self, mask):
kernel = np.ones((7, 1), np.uint8)
op = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
return op
def __init__(self, img_got,imgname):
img = img_got
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
mask_temp = cv2.inRange(hsv, self.__ob_low, self.__ob_high)
mask = self.__opening(mask_temp)
maskdir = "/home/pi/capstone/mask/" #
img_name = imgname #
cv2.imwrite(os.path.join(maskdir,img_name),mask) #
if not (np.any(mask)):
print("mask is empty")
array1 = np.transpose(np.nonzero(mask))
array2 = np.nonzero(mask)
ymin=min(array2[1])
ymax=max(array2[1])
xmin=min(array2[0])
xmax=max(array2[0])
self.x = xmax-xmin
self.y = ymax-ymin
self.ratio = self.x/self.y
self.img = img
self.mask = mask[(xmin):(xmax),(ymin):(ymax)]
答案 0 :(得分:0)
这是因为从相机直接捕获的image
与保存在磁盘中的image.jpg
不同。第一个对cv2.Inrange()
更敏感。在保存过程中,image
的部分内容会丢失。如果我将文件保存为其他格式,例如.png
,则结果会有所不同。
无论如何,要同步R-Pi
和labtop,我已更改代码以在.jpg
和labtop中使用已保存的R-Pi
文件。
答案 1 :(得分:0)
在其他系统上,我的代码出现问题,事实证明,版本3.4.1和3.3.1与裁剪算法产生的结果不同!