c++ - 打开 CV 水彩滤镜。 (遍历图像的像素)

标签 c++ opencv

我正在尝试按照此伪代码在 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/

相关文章:

python - Python OpenCV中的侵 eclipse 和膨胀返回白色

C++:boost::asio:我可以用于 TCP 套接字的最大缓冲区大小是多少?

c++ - 使用可变模板参数解析 lambda 签名

c++ - 如何将 c++ 接口(interface) cv::Mat 转换为 c IplImage?

Python cv2 HoughLines网格线检测

opencv - 简历.h : file not found opencv

c++ - OpenCV中两点之间直线的斜率和长度

c++ - 'std::out_of_range' what(): basic_string::substr: __pos

c++ - 为什么 C++ 有一个额外的类名声明?

c++ - unordered_map 值类型为 reference_wrapper 时的赋值