日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

opencv——图片找不同

發布時間:2023/12/15 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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——图片找不同的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。