#include <opencv2/opencv.hpp>
#include <opencv2/video/background_segm.hpp>
// 注意srcImage为3通道的彩色图片
cv::Mat inverseColor4(cv::Mat &srcImage)
{
cv::Mat tempImage = srcImage.clone();
// 初始化源图像迭代器
cv::MatConstIterator_<cv::Vec3b> srcIterStart =
srcImage.begin<cv::Vec3b>();
cv::MatConstIterator_<cv::Vec3b> srcIterEnd =
srcImage.end<cv::Vec3b>();
// 初始化输出图像迭代器
cv::MatIterator_<cv::Vec3b> resIterStart =
tempImage.begin<cv::Vec3b>();
cv::MatIterator_<cv::Vec3b> resIterEnd =
tempImage.end<cv::Vec3b>();
// 遍历图像反色处理
while (srcIterStart != srcIterEnd)
{
(*resIterStart)[0] = 255 - (*srcIterStart)[0];
(*resIterStart)[1] = 255 - (*srcIterStart)[1];
(*resIterStart)[2] = 255 - (*srcIterStart)[2];
// 迭代器递增
srcIterStart++;
resIterStart++;
}
return tempImage;
}
int main(void)
//int test01()
{
cv::Mat image = cv::imread("lenasift.bmp");
if (image.empty())
{
std::cerr << "Load image failed!" << std::endl;
return 0;
}
cv::Mat result = inverseColor4(image);
cv::imshow("src", image);
cv::imshow("result", result);
cv::waitKey();
return 0;
}