我正在尝试按照此伪代码在 Open CV 中实现水彩滤镜。 http://supercomputingblog.com/graphics/oil-painting-algorithm/
我以前在 javascript 中使用此方法和 Canvas 实现了效果,因为我可以遍历像素,但我不确定如何使用 Open CV 来实现。
Mat im = imread(...); //input image
Mat paint; // output after processing
for(int i = 0; i < im.rows; i++)
{
for (int j = 0; j < im.cols; j++) //for each pixel
{
//here I need a reference to the pixel colour from im
}
}
我尝试使用:
im.at<uchar>(i,j)
然而,这在很大程度上给我提供了大约 350 的值,这在我看来是 rgb channel 的累积(我认为是多 channel 阵列)。所以我试着像这样拆分它:
vector<Mat> three_channels;
split(im, three_channels);
但它只给了我 3 次相同的值。有什么建议吗?
最佳答案
我最终只是访问了它们,因此:
int r = im.at<cv::Vec3b>(y,x)[0];
int g = im.at<cv::Vec3b>(y,x)[1];
int b = im.at<cv::Vec3b>(y,x)[2];
如前一个问题的答案中所述。
关于c++ - 打开 CV 水彩滤镜。 (遍历图像的像素),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36312334/