android - OpenCV:查找彩色HSV的上下限

标签 android opencv

以下代码读取中心的像素并返回三个我假设为H = data[0], S data[1], V = data[2]的值,如何获得HSV值的上限和下限?

注意:我正在读取的彩色像素为绿色。

E/data: H:90.0 S:113.0 V:144.0


if (getIntent().hasExtra("byteArray")) {

            bitmap = BitmapFactory.decodeByteArray(getIntent().getByteArrayExtra("byteArray"), 0, getIntent().getByteArrayExtra("byteArray").length);

            int width= bitmap.getWidth();
            int height=bitmap.getHeight();

            int centerX=width/2;
            int centerY=height/2;
            srcMat = new Mat();
            Utils.bitmapToMat(bitmap, srcMat);
            Imgproc.cvtColor(srcMat, srcMat, Imgproc.COLOR_BGR2HSV);
            srcMat.convertTo(srcMat, CvType.CV_64FC3); //http://answers.opencv.org/question/14961/using-get-and-put-to-access-pixel-values-in-java/
            double[] data = srcMat.get(centerX, centerY);
            Log.e("data", String.valueOf("H:"+data[0]+" S:"+data[1]+" V:"+data[2]));
            Log.e("dlength", String.valueOf(data.length));
            Mat matHSV = new Mat(0,0,CvType.CV_64FC3);

另外,通过添加以下三行代码,我将收到一条错误消息,指出bitmap == null,因此我无法真正确定像素读取是否有效。
matHSV.put(0,0,data);
Utils.matToBitmap(matHSV, bb);
imgDisplay.setImageBitmap(bb);

我正在阅读的图片:
enter image description here

最佳答案

只需使用Mat方法将Imgproc.cvtColor()转换为HSV模型:

Imgproc.cvtColor(hsvMat, hsvMat, Imgproc.COLOR_RGB2HSV);

比找到每个像素上的min/max色相值(使用Mat.get(int,int)方法)-多数民众赞成在minmax作为答案:HSV模型中颜色的上下限。

注意! Hue for OpenCV 8-bit images is Hue/2,因为“正常”模型中的Hue值在0到360之间,并且大于255-字节的最大值。因此,如果您需要“常规” HSV模型的色界(而不是Android OpenCV的HSV),则应将其乘以2。

关于android - OpenCV:查找彩色HSV的上下限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45541584/

相关文章:

android - 使用处理程序发布到 UI 线程

java - 有什么方法可以将 GeoFence 添加到 Mapbox 中吗?

python - matplotlib imshow 扭曲颜色

python - 如何将图像转换为字节数组?

android - 如何抑制 "UseSparseArrays"的语句?

java - 错误预期为 BEGIN_OBJECT 但为 STRING - 字符串内对象的反序列化

android - 是否有任何设计模式可以应用于 Android 位置管理器帮助程序类?

matlab - 检测图像中的数独方 block

c++ - opencv 相机校准 object_points 方向

c++ - undefined reference cv::imread(std::string const&, int)