5

我正在尝试创建棕褐色效果。这是我正在尝试的代码:

    Mat image_copy;
    cvtColor(image, image_copy, CV_BGRA2BGR);

    Mat kern = (Mat_<char>(4,4) <<  0.272, 0.534, 0.131, 0,
                0.349, 0.686, 0.168, 0,
                0.393, 0.769, 0.189, 0,
                0, 0, 0, 1);
    cv::transform(image_copy, image, kern);

但它不起作用。我得到一个黑色的图像。没有错误,没有例外,只是黑色图像。有任何想法吗?

我尝试过应用不同的内核并且它们确实有效。例如:

    Mat kern = (Mat_<char>(4,4) <<  10, 0, 0, 0,
                0, 10, 0, 0,
                0, 0, 10, 0,
                0, 0, 0, 10);
    cv::transform(image_copy, image, kern);
    image += cv::Scalar(10, 10, 10, 0);

请帮忙。

4

1 回答 1

6

似乎您正在创建一个char价值内核,但试图存储float价值。

确保使用与要存储的值相同的数据类型声明内核

#include <cv.h>
#include <highgui.h>

#include <iostream>

int main()
{
    cv::Mat image = cv::imread("test.jpg");
    if (!image.data)
    {
        std::cout << "!!! Failed imread" << std::endl;
        return -1;
    }

    cv::Mat image_copy = image.clone();

    cv::Mat kern = (cv::Mat_<float>(4,4) <<  0.272, 0.534, 0.131, 0,
                                             0.349, 0.686, 0.168, 0,
                                             0.393, 0.769, 0.189, 0,
                                             0, 0, 0, 1);

    cv::transform(image_copy, image, kern);

    cv::imshow("sepia", image);
    cv::waitKey(0);

    return 0;
}
于 2013-04-08T01:32:33.620 回答