opencv——图片找不同
生活随笔
收集整理的這篇文章主要介紹了
opencv——图片找不同
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
相信大家都玩過找不同的小游戲,對于相對復雜的圖片有時候找花了眼也找不出其中的不同,正好現在在學習opencv,突然想通過opencv實現圖片的找不同,這個也是非常的簡單。直接上圖片。這是從網上找的一張圖片,如果出現侵權請聯系我刪除。這幅圖片看起來比較簡單,可以很容易的找到,下面通過代碼來實現。
首先這是一副完整的圖像分為左右兩邊,在若干部位出現不同,先把圖片看成是兩幅基本相同的圖像拼接在一起,那么出現不同的地方一定是兩幅圖片中相同的部分,所以只要找出相同的位置不同的顏色顯示并標記出來即可。代碼實現:圖片分為兩塊進行遍歷找出不同。
代碼如下
#include"opencv2/core/core.hpp" #include"opencv2/highgui/highgui.hpp" #include<opencv2/opencv.hpp> using namespace cv; #include"iostream" using namespace std; Mat find_diff(Mat img){int imgrow=img.rows;int imgcol=img.cols;int channel=img.channels();Mat out=Mat::zeros(imgrow,imgcol,CV_8UC3);//返回也是相同大小的圖像for(int i=0;i<imgrow;i++){for(int j=0;j<imgcol/2;j++){ //imgcol/2是將圖像從中間分為左右兩邊進行比較for(int k=0;k<channel;k++){out.at<Vec3b>(i,j)[k]=img.at<Vec3b>(i,j)[k];out.at<Vec3b>(i,j+imgcol/2)[k]=img.at<Vec3b>(i,j+imgcol/2)[k];if(out.at<Vec3b>(i,j)[k]!=out.at<Vec3b>(i,j+imgcol/2)[k]){out.at<Vec3b>(i,j)[k]=255;out.at<Vec3b>(i,j+imgcol/2)[k]=255;//255代表白色的像素值,不同地方用白色標記}}}}return out; } void main(){Mat img=imread("3.jpg",IMREAD_COLOR);cout << img.rows << " "<< img.cols << endl;Mat out=find_diff(img);imshow("sample",out);waitKey(0); }這里要考慮到讀取圖片的尺寸,用下面語句進行顯示,這個牽扯到圖片分割的imgcol/2的結果,如果不能被2整除,結果就會受到影響。
cout << img.rows << " "<< img.cols << endl;上述代碼的效果圖如下所示,不同的地方被白色進行標記。
?
?
?
總結
以上是生活随笔為你收集整理的opencv——图片找不同的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 防晒新时代,小红书美妆品牌营销趋势洞察
- 下一篇: 技校计算机专业自我鉴定,关于技校计算机专