修改了一下哈希感知算法

       怎么说呢,最近在搞这个图像匹配,就试了一下这个功能

原算法

	Mat ori1 = imread("D:/trying/newImg/1.jpg");
	Mat ori2 = imread("D:/trying/newImg/1.jpg");
	Mat src1, src2;
	Mat dst1, dst2;
	double t = (double)getTickCount();
	int sizeNum = 64;
	int pSN = sizeNum*sizeNum;
	resize(ori1, src1, Size(sizeNum, sizeNum), 0, 0, INTER_NEAREST);
	resize(ori2, src2, Size(sizeNum, sizeNum), 0, 0, INTER_NEAREST);
	cvtColor(src1, dst1, CV_BGR2GRAY);
	cvtColor(src2, dst2, CV_BGR2GRAY);
	int arr1[4096];
	int arr2[4096];
	int aveg1 = 0, aveg2 = 0;
	int temp = 0;
	uchar *data1;
	uchar *data2;
	for (int i = 0; i < sizeNum; i++)
	{
		data1 = src1.ptr(i);
		data2 = src2.ptr(i);
		for (int j = 0; j < sizeNum; j++)
		{
			temp = i * sizeNum + j;
			arr1[temp] = data1[j] / 4 * 4;
			arr2[temp] = data2[j] / 4 * 4;
			aveg1 += arr1[temp];
			aveg2 += arr2[temp];
		}
	}
	aveg1 /= pSN;
	aveg2 /= pSN;
	for (int i = 0; i < pSN; i++)
	{
		arr1[i] = arr1[i] >= aveg1 ? 1 : 0;
		arr2[i] = arr2[i] >= aveg2 ? 1 : 0;
	}
	int difNum = 0;
	for (int i = 0; i < pSN; i++)
	{
		if (arr1[i] != arr2[i])
		{
			difNum++;
		}
	}
	cout << "不匹配的点数量:" << difNum << endl;
	if (difNum <= 5)
		cout << "非常相似!" << endl;
	else if (difNum <= 10)
		cout << "比较相似!" << endl;
	else
		cout << "根本不像!" << endl;
	t = ((double)getTickCount() - t) / getTickFrequency();
	cout << "经过的时间: " << t << endl;
	cvWaitKey();

自己尝试稍微变了一下,其实差不多

void PHA0(Mat ori1,Mat ori2,int sizeNum)
{
	Mat src1, src2;
	Mat dst1, dst2;
	int pSN = sizeNum*sizeNum;
	resize(ori1, src1, Size(sizeNum, sizeNum), 0, 0, INTER_NEAREST);
	resize(ori2, src2, Size(sizeNum, sizeNum), 0, 0, INTER_NEAREST);
	cvtColor(src1, dst1, CV_BGR2GRAY);
	cvtColor(src2, dst2, CV_BGR2GRAY);
	int *arr1 = new int[pSN]; 
	int *arr2 = new int[pSN];
	int temp = 0;
	for (int i = 0; i < sizeNum; i++)
	{
		uchar *data1 = src1.ptr(i);
		uchar *data2 = src2.ptr(i);
		for (int j = 0; j < sizeNum; j++)
		{
			temp = i * sizeNum + j;
			arr1[temp] = data1[j] / 4 * 4;
			//cout << "data1, arr1: " << int(data1[j]) << "_" << arr1[temp] << endl;
			arr2[temp] = data2[j] / 4 * 4;
		}
	}
	for (int i = 0; i < pSN; i++)
	{
		arr1[i] = arr1[i] / 10.0;
		arr2[i] = arr2[i] / 10.0;
	}
	int difNum = 0;
	for (int i = 0; i < pSN; i++)
	{
		if (arr1[i] != arr2[i])
		{
			difNum++;
		}
	}
	cout << "不匹配的点数量:" << difNum << endl;
	if (difNum <= 5)
		cout << "神似!" << endl;
	else if (difNum <= 10)
		cout << "貌似!" << endl;
	else
		cout << "异类!" << endl;
	cvWaitKey();
}

试了一下效果基本上差不多,哈哈,嗯,挺有意思的 运行效果:
《修改了一下哈希感知算法》

《修改了一下哈希感知算法》

    原文作者:哈希算法
    原文地址: https://blog.csdn.net/Meet33/article/details/75051885
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞