opencvhsv:iOS与Python和C++;
我正在使用OpenCV 3.4.4将图像从BGR转换为HSV。在Python和C++中,结果完全一样,但IOS产生不同的值。问题的关键在于,IOS中的色调不同,Python和C++产生了完全相同的值。 用pythonopencvhsv:iOS与Python和C++;,ios,Ios,我正在使用OpenCV 3.4.4将图像从BGR转换为HSV。在Python和C++中,结果完全一样,但IOS产生不同的值。问题的关键在于,IOS中的色调不同,Python和C++产生了完全相同的值。 用python import cv2 image = cv2.imread("monkey.jpg") hsv = cv2.cvtColor(image,cv2.COLOR_BGR2HSV) print(hsv[0][0]) # [30,132,135] 在C中++ #include <
import cv2
image = cv2.imread("monkey.jpg")
hsv = cv2.cvtColor(image,cv2.COLOR_BGR2HSV)
print(hsv[0][0])
# [30,132,135]
在C中++
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
Mat image,hsv;
image = imread("monkey.jpg")
cvtColor(image,hsv,COLOR_BGRHSV);
cout << hsv.at<cv::Vec3b>(0,0) << endl;
// [30,132,135]
#包括
#包括
使用名称空间std;
使用名称空间cv;
Mat图像,hsv;
image=imread(“monkey.jpg”)
CVT颜色(图像、hsv、彩色);
cout我将发布我自己问题的答案
当我们在iOS中将图像读取为UIImage时,它是RGB,而不是BGR。这很简单,但与我们通常使用python/C++中的cv2.imread读取图像时相反。所以我需要做的是:
UIImage -> RGB -> BGR -> HSV
那么,所有三个(Python,C++,Objul-C/C++)都有相同的[30132135 ] < /P>
这是我在OpenCVWrapper.mm文件中的代码:
#import <opencv2/opencv.hpp>
#import "OpenCVWrapper.h"
#import <opencv2/imgcodecs/ios.h>
#import <UIKit/UIKit.h>
#include <iostream>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
@implementation OpenCVWrapper
+ (void)getHSV:(UIImage *)image {
cv::Mat mat;
cv::Mat hsv;
UIImageToMat(image, mat);
cv::cvtColor(mat, hsv, cv::COLOR_BGR2HSV);
std::cout << hsv.at<cv::Vec3b>(0,0) << std::endl;
@end
+ (void)getHSV:(UIImage *)image {
cv::Mat matRGB, matBGR, hsv;
UIImageToMat(image,matRGB);
//std::cout << mat.at<cv::Vec3b>(0,0) << std::endl;
cv::cvtColor(matRGB,matBGR,cv::COLOR_RGB2BGR);
//std::cout << matBGR.at<cv::Vec3b>(0,0) << std::endl;
cv::cvtColor(matBGR,hsv,cv::COLOR_BGR2HSV);
std::cout << hsv.at<cv::Vec3b>(0,0) << std::endl;
}
+(void)getHSV:(UIImage*)图像{
cv::matRGB、matBGR、hsv;
UIImageToMat(图像,matRGB);
//大多数HSV色调范围是0到360。请参阅。我不确定Apple使用的是什么。但OpenCV使用0到180。(按0到360的1/2进行缩放以将值保持在8位范围内)。请参阅位于的蓝色线下的注释。然而,我本以为这意味着对于我使用的特定图像,我在iOS OpenCV包装器实现中使用for循环检查了范围。色调范围为0-179。如果存在,我必须使用苹果的官方文档对此进行双重检查。如果色调范围与OpenCV相同,为什么会出现这种情况在iOS OpenCV包装中为90,而在其他语言中为30?其他语言使用0到360,而不是0到180。