Мне нужно было преобразовать изображение (RGB, хранящееся на .jpg), чтобы выделить конкретную область. Используя ImageJ, я узнал, что извлечение L-канала изображения в цветовом пространстве LAB является именно тем, что мне нужно для дальнейшей проверки. При реализации в C++/OpenCV, результат полностью отличается от ImageJ один (см фото ImageJ L-channel и OpenCV L-channel):Разница в RGB -> L * a * b трансформация в OpenCV и ImageJ
#include "opencv2/opencv.hpp"
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
using namespace cv;
using namespace std;
int main(){
vector <Mat> lab_planes;
Mat src, lab;
src = imread("Pic.jpg", CV_LOAD_IMAGE_COLOR);
cvtColot(src, lab, CV_BGR2Lab);
split(lab, lab_planes);
imshow("L", lab_planes[0]);
imshow("a", lab_planes[1]);
imshow("b", lab_planes[2]);
waitKey(0);
return 0;
}
Я попытался Google, что и выяснили, что там может быть проблема в разнице хранения диапазоны каналов (0 - 255 вместо «правильного» 0 - 100) или RGB-презентации, но я не понимаю, как получить тот же результат, что и с ImageJ.
Спасибо!
простой! спасибо, Андрей. Результат «расширения» до 0-255 дал результат. – melodisease