关于opencv的Mat类型的imwrite()函数写入.jpg图像像素值会改变的解决方案
2017-06-08 17:03
537 查看
#include <string>
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
int main(){
string path = "F:\\example_tongue\\18标定.jpg";
Mat src = cv::imread(path);
Mat dst =Mat::zeros(1276,880,CV_8UC3);
for(int j = 0; j <src.rows; j++)
{
for(int i = 0; i<src.cols; i++)//注意:列的最大值是col-1,最小值是0
{
uchar *data = (src.data + src.step * j + src.channels()*i);
uchar *data_a = (dst.data + dst.step * j + dst.channels()*i);
if(((data[0]==254)&&(data[1]==0)&&(data[2]==0))||((data[0]==255)&&(data[1]==0)&&(data[2]==240)))
{
data_a[0]=data[0];
data_a[1]=data[1];
data_a[2]=data[2];
}
else
{
data_a[0]=0;
data_a[1]=0;
data_a[2]=0;
}
}
}
imwrite("F:\\eg\\18标定.jpg",dst);
return 0;
}
对于以上代码的 imwrite("F:\\eg\\18标定.jpg",dst);会使得保存的图像像素不是所赋值的像素值,解决该bug的方法是将图像存储为.tif格式,即 imwrite("F:\\eg\\18标定.tif",dst);
#include <string>
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
int main(){
string path = "F:\\example_tongue\\18标定.jpg";
Mat src = cv::imread(path);
Mat dst =Mat::zeros(1276,880,CV_8UC3);
for(int j = 0; j <src.rows; j++)
{
for(int i = 0; i<src.cols; i++)//注意:列的最大值是col-1,最小值是0
{
uchar *data = (src.data + src.step * j + src.channels()*i);
uchar *data_a = (dst.data + dst.step * j + dst.channels()*i);
if(((data[0]==254)&&(data[1]==0)&&(data[2]==0))||((data[0]==255)&&(data[1]==0)&&(data[2]==240)))
{
data_a[0]=data[0];
data_a[1]=data[1];
data_a[2]=data[2];
}
else
{
data_a[0]=0;
data_a[1]=0;
data_a[2]=0;
}
}
}
imwrite("F:\\eg\\18标定.jpg",dst);
return 0;
}
对于以上代码的 imwrite("F:\\eg\\18标定.jpg",dst);会使得保存的图像像素不是所赋值的像素值,解决该bug的方法是将图像存储为.tif格式,即 imwrite("F:\\eg\\18标定.tif",dst);
相关文章推荐
- matlab imwrite函数保存jpg格式图像丢失数据或改变图像
- 关于OpenCV中利用函数cvConvert实现图像数据类型转换(8U->16S)
- Opencv:Mat图像的复制,以及改变像素点的颜色
- Opencv2 中 Mat 关于图像像素的操作
- opencv中如何利用mat来获取连续内存的图像区域,并改变形状
- opencv2中使用Mat对图像像素进行操作
- 2014年3月29日 遇到的关于opencv将图像转换为数组的几个问题 包含cvmat 到mat转换
- Opencv中Mat图的长、宽、行、列以及图像像素
- 【OpenCV】访问Mat图像中每个像素的值
- 【OpenCV】访问Mat图像中每个像素的值
- Opencv学习笔记(五):关于OpenCV2中的Mat图像容器
- 关于opencv图像类型的转换
- 【OpenCV学习笔记】【函数学习】二十(访问图像像素)
- 【OpenCV】访问Mat图像中每个像素的值
- 【OpenCV】访问Mat图像中每个像素的值
- 我的OpenCV学习笔记(三):利用操作像素完成简单的图像处理:加入椒盐噪声、图像翻转、改变对比度、图像锐化
- 【OpenCV】访问Mat图像中每个像素的值
- 【OpenCV】访问Mat图像中每个像素的值
- 【OpenCV】访问Mat图像中每个像素的值
- 【OpenCV】访问Mat图像中每个像素的值