我想创造一个棕褐色效果.这是我正在尝试的代码:
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);
请帮忙.
最佳答案
看来你正在创建一个char值的内核,但试图存储浮点值.
确保使用与要存储的值相同的数据类型声明内核:
#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;
}
相关文章
转载注明原文:c – OpenCV帮助我使用Sepia内核 - 代码日志