一个图像算法工程师请用c++和opencv对一个图像中如果r、g、b三个通道的相互之间的像素值之差的绝对值在20以内就将这个位置掩模为红色并输出图像代码
以下是用C++和opencv实现上述功能的代码:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat image = imread("example.jpg");
if (image.empty()) {
cerr << "Failed to open image file!" << endl;
return -1;
}
Mat mask(image.rows, image.cols, CV_8UC1);
for (int i = 0; i < image.rows; i++) {
for (int j = 0; j < image.cols; j++) {
Vec3b pixel = image.at<Vec3b>(i, j);
int diff1 = abs(pixel[0] - pixel[1]);
int diff2 = abs(pixel[1] - pixel[2]);
int diff3 = abs(pixel[2] - pixel[0]);
if (diff1 <= 20 && diff2 <= 20 && diff3 <= 20) {
mask.at<uchar>(i, j) = 255;
} else {
mask.at<uchar>(i, j) = 0;
}
}
}
Mat result;
cvtColor(image, result, COLOR_BGR2BGRA);
cvtColor(result, result, COLOR_BGRA2BGR);
result.setTo(Scalar(0, 0, 255), mask);
imshow("Original Image", image);
imshow("Result Image", result);
waitKey();
return 0;
}
这个程序会读取名为example.jpg的图像文件,并将其分解成红、绿、蓝三个通道。然后,它遍历每个像素,并计算出相邻三个通道之间的像素值差异。如果所有差异都小于或等于20,那么它将该像素的掩模设置为红色。最后,程序将结果图像输出并显示在屏幕上
原文地址: https://www.cveoy.top/t/topic/ch8Q 著作权归作者所有。请勿转载和采集!