图片处理的常见手段-C++篇
高质量保存图片
vector<int> compression_params;
compression_params.push_back(cv::IMWRITE_JPEG_QUALITY); //选择jpeg
compression_params.push_back(100);
std::stringstream ss;
ss << "./" << getNowTimeText() << ".jpg";
cv::imwrite(ss.str(), resize, compression_params);
std::vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_PNG_COMPRESSION);//选择PNG格式
compression_params.push_back(0); // 无压缩png(从0-9.较高的值意味着更小的尺寸和更长的压缩时间而默认值是3.本人选择0表示不压缩)
原样读取图片
cv2.imread("xx.jpg", cv2.IMREAD_UNCHANGED)
图片调整大小
void cv::resize (InputArray src,OutputArray dst,Size dsize,double fx = 0,double fy = 0,int interpolation = INTER_LINEAR)
参数
src - 输⼊图像。
dst - 输出图像;它的⼤⼩为 dsize(当它⾮零时)或从 src.size()、fx 和 fy 计算的⼤⼩;dst 的类型与 src 的类型相同。
dsize - 输出图像⼤⼩;如果它等于零,则计算为:dsize = Size(round(fxsrc.cols), round(fysrc.rows))。dsize 或 fx 和 fy 必须为⾮
零。
fx - 沿⽔平轴的⽐例因⼦;当它等于 0 时,它被计算为(double)dsize.width/src.cols
fy - 沿垂直轴的⽐例因⼦;当它等于 0 时,它被计算为(double)dsize.height/src.rows
cv::resize(raw, resize, {width, height}, 0, 0, cv::INTER_CUBIC);
cv::resize(raw, resize, {width, height}, 0, 0, cv::INTER_LINEAR);
查看CV版本
printf(CV_VERSION);
python 版本是pip list查看
比较两个IMAGE是否相同
def pixel_equal(self, image1, image2, x, y):
"""
判断两个像素是否相同
:param image1: 图片1
:param image2: 图片2
:param x: 位置x
:param y: 位置y
:return: 像素是否相同
"""
# 取两个图片像素点
piex1 = image1[x, y]
piex2 = image2[x, y]
threshold = 10
if (np.all(piex1!=piex2)):
print(x,y)
print("piex1", piex1)
print("piex2", piex2)
# 比较每个像素点的RGB值是否在阈值范围内,若两张图片的RGB值都在某一阈值内,则我们认为它的像素点是一样的
if abs(piex1[0] - piex2[0]) < threshold and abs(piex1[1]- piex2[1]) < threshold and abs(piex1[2] - piex2[2]) < threshold:
return True
else:
return False
def compare(self, image1, image2):
"""
进行比较
:param image1:图片1
:param image2: 图片2
:return:
"""
left = 0 # 坐标起始位置
right_num = 0 # 记录相同像素点个数
false_num = 0 # 记录不同像素点个数
all_num = 0 # 记录所有像素点个数
for i in range(left, image1.shape[0]):
for j in range(image1.shape[1]):
if self.pixel_equal(image1, image2, i, j):
right_num += 1
else:
false_num += 1
all_num += 1
same_rate = right_num / all_num # 相同像素点比例
nosame_rate = false_num / all_num # 不同像素点比例
print("same_rate: ", same_rate)
print("no same_rate: ", nosame_rate)