level 1
yang76230848
楼主
http://t.zoukankan.com/shuimuqingyang-p-14118617.html 此网址 有一些介绍 但在测试代码时
提取不到 色卡 所以进不到 事例代码的for()函数中 有大神指教下吗
下面是上面网址的代码 可以编译能过 但检测不到色卡
#include <opencv2/imgcodecs.hpp>
#include <opencv2/mcc.hpp>
#include <iostream>
using namespace std;
using namespace cv;
using namespace mcc;
using namespace ccm;
int main(int argc, char *argv[])
{
// [get_messages_of_image]:获取图像消息
string filepath = "input.png"; // 输入图片路径
Mat image = imread(filepath, IMREAD_COLOR);
Mat imageCopy = image.clone();
Ptr<CCheckerDetector> detector = CCheckerDetector::create();
// [get_color_checker]:准备ColorChecker检测
vector<Ptr<mcc::CChecker>> checkers = detector->getListColorChecker() ;// 在此外并没有检测的色卡
for (Ptr<mcc::CChecker> checker : checkers)
{
// [create]:创建CCheckerDetector对象,并使用getListColorChecker函数获取ColorChecker信息。
Ptr<CCheckerDraw> cdraw = CCheckerDraw::create(checker);
cdraw->draw(image);
Mat chartsRGB = checker->getChartsRGB();
Mat src = chartsRGB.col(1).clone().reshape(3, chartsRGB.rows/3);
src /= 255.0;
// [get_ccm_Matrix]:对于每个ColorChecker,都可以计算一个ccm矩阵以进行颜色校正。Model1是ColorCorrectionModel类的对象,可以根据需要来修改参数以获得最佳色彩校正效果。
ColorCorrectionModel model1(src, COLORCHECKER_Vinyl);
model1.run();
Mat ccm = model1.getCCM();
std::cout<<"ccm "<<ccm<<std::endl;
double loss = model1.getLoss();
std::cout<<"loss "<<loss<<std::endl;
// [make_color_correction]:成员函数infer_image用于使用ccm矩阵进行校正校正。
Mat img_;
cvtColor(image, img_, COLOR_BGR2RGB);
img_.convertTo(img_, CV_64F);
const int inp_size = 255;
const int out_size = 255;
img_ = img_ / inp_size;
Mat calibratedImage= model1.infer(img_);
Mat out_ = calibratedImage * out_size;
// [Save_calibrated_image]:保存已校准的图像。
out_.convertTo(out_, CV_8UC3);
Mat img_out = min(max(out_, 0), out_size);
Mat out_img;
cvtColor(img_out, out_img, COLOR_RGB2BGR);
imwrite("output.png",out_img);
}
return 0;
}
2021年06月09日 10点06分
1
提取不到 色卡 所以进不到 事例代码的for()函数中 有大神指教下吗
下面是上面网址的代码 可以编译能过 但检测不到色卡
#include <opencv2/imgcodecs.hpp>
#include <opencv2/mcc.hpp>
#include <iostream>
using namespace std;
using namespace cv;
using namespace mcc;
using namespace ccm;
int main(int argc, char *argv[])
{
// [get_messages_of_image]:获取图像消息
string filepath = "input.png"; // 输入图片路径
Mat image = imread(filepath, IMREAD_COLOR);
Mat imageCopy = image.clone();
Ptr<CCheckerDetector> detector = CCheckerDetector::create();
// [get_color_checker]:准备ColorChecker检测
vector<Ptr<mcc::CChecker>> checkers = detector->getListColorChecker() ;// 在此外并没有检测的色卡
for (Ptr<mcc::CChecker> checker : checkers)
{
// [create]:创建CCheckerDetector对象,并使用getListColorChecker函数获取ColorChecker信息。
Ptr<CCheckerDraw> cdraw = CCheckerDraw::create(checker);
cdraw->draw(image);
Mat chartsRGB = checker->getChartsRGB();
Mat src = chartsRGB.col(1).clone().reshape(3, chartsRGB.rows/3);
src /= 255.0;
// [get_ccm_Matrix]:对于每个ColorChecker,都可以计算一个ccm矩阵以进行颜色校正。Model1是ColorCorrectionModel类的对象,可以根据需要来修改参数以获得最佳色彩校正效果。
ColorCorrectionModel model1(src, COLORCHECKER_Vinyl);
model1.run();
Mat ccm = model1.getCCM();
std::cout<<"ccm "<<ccm<<std::endl;
double loss = model1.getLoss();
std::cout<<"loss "<<loss<<std::endl;
// [make_color_correction]:成员函数infer_image用于使用ccm矩阵进行校正校正。
Mat img_;
cvtColor(image, img_, COLOR_BGR2RGB);
img_.convertTo(img_, CV_64F);
const int inp_size = 255;
const int out_size = 255;
img_ = img_ / inp_size;
Mat calibratedImage= model1.infer(img_);
Mat out_ = calibratedImage * out_size;
// [Save_calibrated_image]:保存已校准的图像。
out_.convertTo(out_, CV_8UC3);
Mat img_out = min(max(out_, 0), out_size);
Mat out_img;
cvtColor(img_out, out_img, COLOR_RGB2BGR);
imwrite("output.png",out_img);
}
return 0;
}