Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
opencvjava中的掩码图像_Java_Python_Numpy_Opencv_Cv2 - Fatal编程技术网

opencvjava中的掩码图像

opencvjava中的掩码图像,java,python,numpy,opencv,cv2,Java,Python,Numpy,Opencv,Cv2,我需要将近白色像素转换为白色,将近黑色像素转换为黑色 我在python中找到了一段关于如何实现这一点的代码片段 hsv=cv.cvtColor(image,cv.COLOR_BGR2HSV) # Define lower and upper limits of what we call "brown" brown_lo=np.array([10,0,0]) brown_hi=np.array([20,255,255]) # Mask image to only select

我需要将近白色像素转换为白色,将近黑色像素转换为黑色

我在python中找到了一段关于如何实现这一点的代码片段

hsv=cv.cvtColor(image,cv.COLOR_BGR2HSV)
# Define lower and upper limits of what we call "brown"
brown_lo=np.array([10,0,0])
brown_hi=np.array([20,255,255])
# Mask image to only select browns
mask=cv.inRange(hsv,brown_lo,brown_hi)
# Change image to red where we found brown
image[mask>0]=(0,0,255)
我已将其转换为java,如下所示

Mat temp= new Mat();
Imgproc.cvtColor(src,temp,COLOR_BGR2HSV);
Scalar low= new Scalar(10,0,0);
Scalar high= new Scalar(20,255,255);
Mat mask = new Mat();
inRange(temp,low,high,mask);
但我在将下面的语句转换为java时遇到了问题,而且java中没有好的opencv文档和示例

image[mask>0]=(0,0,255)
有人能帮忙把上面的语句转换成java吗

我已经尝试过setTo,但它并没有给出期望的行为(下面附上的屏幕截图)。有关预期结果,请参阅

src.setTo(new Scalar(0,0,255),mask);
我建议使用。此方法可以在
矩阵中设置所有he像素。如果指定了可选的掩码参数,则将设置掩码中具有非零值的对应像素的所有像素

因此,python语句

image[mask>0]=(0,0255)
在Java中可替换为:

image.setTo(新标量(0,0255),掩码);
其中,
image
必须是
Mat
对象。

回答问题 正如@rabbi76所提到的,
设置为
是正确的方法。但是,如果您需要特定的逻辑,如
image[mask>127]=(0,0255)
,则执行阈值(
Imgproc.threshold(灰色、灰色、127、255、阈值二进制);
),然后使用
设置为

我问题的解决办法 实际上,我的问题不是由于
设置为
。这是我在代码中读/写Mat与我引用的文章之间的逻辑不匹配

我正在发布我所面临的问题的解决方案,以帮助像我这样的新蜜蜂

图像阅读中的问题 post使用
Imgcodecs.imread()
将图像以BGR格式读取到Mat

然而,我正在使用
CV_8UC4
中的
bitmapToMat
加载位图,如下所示,它以RGBA格式将图像读取到Mat

Mat src=new Mat(bitmap.getHeight()、bitmap.getWidth()、CV_8UC4);
org.opencv.android.Utils.bitmapToMat(位图,src);
修复方法是正确转换格式

Mat src=new Mat(bitmap.getHeight()、bitmap.getWidth()、CV_8UC3)//公告3频道
org.opencv.android.Utils.bitmapToMat(位图,src);
Imgproc.cvtColor(src、hsv、颜色_RGB2HSV)//将RGB转换为HSV。颜色RGBA2HSV不存在,因此我们将其加载到CV_8UC3(3通道R、G、B)中。
图像书写中的问题 同样地,由于我们在
bitmapToMat
imread
之间的读取方面存在差异,因此同样的情况也适用于写入
Imgcodecs.imwrite()
会将BGR图像写入位图,我必须将其转换回RGB格式,以便
matToBitmap
Imgproc.cvtColor(RGB,RGB,Imgproc.COLOR\u BGR2RGB)一样工作