OpenCV修改图像像素[重复]
Posted
技术标签:
【中文标题】OpenCV修改图像像素[重复]【英文标题】:OpenCV modify image pixels [duplicate] 【发布时间】:2017-09-26 12:13:34 【问题描述】:我想修改图像的每个像素。但结果并不像我预期的那样。
原图:
结果:
for循环修改每个像素:
image = imread("image.png", CV_LOAD_IMAGE_COLOR)
unsigned char value;
for (int col = 0; col < image.cols; col++)
for (int row = 0; row < image.rows; row++)
value = image.at<unsigned char>(row,col);
value *= 0;
image.at<unsigned char>(row, col) = value;
所以我不知道错误在哪里,我想问你是否知道答案。
【问题讨论】:
【参考方案1】:对于 3 通道 unsigned char 图像,您需要在遍历行和列时使用 Vec3b
访问所有 3 个通道。
image = imread("image.png", CV_LOAD_IMAGE_COLOR)
Vec3b value;
for (int row = 0; row < image.rows; row++)
for (int col = 0; col < image.cols; col++)
//Vec3b as typename
value = image.at<Vec3b>(row,col);
value *= 0;
image.at<Vec3b>(row, col) = value;
【讨论】:
由于对所有像素都进行了相同的操作,我更喜欢矩阵表达式——更快更简洁。 |考虑到 OP 乘以 0,一个简单的setTo
甚至只是一个标量赋值都可以。
@DanMašek 是的,还有许多其他方法(例如矩阵乘法、按位运算、parallel_for 等)来执行此操作。但是,由于 OP 似乎是 CV 的初学者并且有兴趣访问每个像素,因此我给出了相应的答案。以上是关于OpenCV修改图像像素[重复]的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV 读写图像读写像素修改像素值(案例:图像反处理)
使用Python,OpenCV获取更改像素,修改图像通道,剪裁ROI
opencv4opencv视频教程 C++ 5读写图像imreadimwrite读写像素at<>()修改像素值ROI区域选择(图像裁剪)RectVec3b与Vec3FCV_32F)