運算子=
利用運算子=的方式,使得DogImg 與DogCloneImg 都會指到同一個記憶體空間,所以在使用
完threshold,兩張影像都會一起被處理,其概念就像是c++中,指標指到一樣地方,故會一起被修改。
////-------------------分隔線
#include <cstdio>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(){
Mat DogImg = imread("dog1.jpg", CV_LOAD_IMAGE_GRAYSCALE);
Mat DogCloneImg;
DogCloneImg = DogImg;
threshold(DogImg, DogImg, 150, 255, CV_THRESH_BINARY);
imshow("DogImg", DogImg);
imshow("DogCloneImg", DogCloneImg);
waitKey(0);
return 0;
}
/////////-------------
結果圖:
複製方法一(clone)
因為是使用clone,所以DogImg 的記憶體位置被改變了,且複製了CatImg的影像數據
,並因為記憶體位置被改變,所以DogCloneImg 影像數據沒有被改變。
////-------------------分隔線
#include <cstdio>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(){
Mat DogImg = imread("dog1.jpg", CV_LOAD_IMAGE_COLOR);
Mat CatImg = imread("cat1.jpg", CV_LOAD_IMAGE_COLOR);
Mat DogCloneImg;
resize(DogImg, DogImg, Size(CatImg.cols, CatImg.rows));
DogCloneImg = DogImg;
DogImg = CatImg.clone();
imshow("DogImg", DogImg);
imshow("CatImg", CatImg);
imshow("DogCloneImg", DogCloneImg);
waitKey(0);
return 0;
}
/////////-------------
結果圖:
因為DogImg 與DogCloneImg 記憶體位置相同,所以在將CatImg的影像數據複製給DogImg 時
DogCloneImg也一起被改變。
////-------------------分隔線
#include <cstdio>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(){
Mat DogImg = imread("dog1.jpg", CV_LOAD_IMAGE_COLOR);
Mat CatImg = imread("cat1.jpg", CV_LOAD_IMAGE_COLOR);
Mat DogCloneImg;
resize(DogImg, DogImg, Size(CatImg.cols, CatImg.rows));
DogCloneImg = DogImg;
CatImg.copyTo(DogImg);
imshow("DogImg", DogImg);
imshow("CatImg", CatImg);
imshow("DogCloneImg", DogCloneImg);
waitKey(0);
return 0;
}
/////////-------------
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(){
Mat DogImg = imread("dog1.jpg", CV_LOAD_IMAGE_COLOR);
Mat CatImg = imread("cat1.jpg", CV_LOAD_IMAGE_COLOR);
Mat DogCloneImg;
resize(DogImg, DogImg, Size(CatImg.cols, CatImg.rows));
DogCloneImg = DogImg;
DogImg = CatImg.clone();
imshow("DogImg", DogImg);
imshow("CatImg", CatImg);
imshow("DogCloneImg", DogCloneImg);
waitKey(0);
return 0;
}
/////////-------------
結果圖:
複製方法二(copyTo與原尺寸相同情況下 )
因為是使用copyto且DogImg與CatImg尺寸相同 ,所以不會改變DogImg 的記憶體位置,並因為DogImg 與DogCloneImg 記憶體位置相同,所以在將CatImg的影像數據複製給DogImg 時
DogCloneImg也一起被改變。
////-------------------分隔線
#include <cstdio>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(){
Mat DogImg = imread("dog1.jpg", CV_LOAD_IMAGE_COLOR);
Mat CatImg = imread("cat1.jpg", CV_LOAD_IMAGE_COLOR);
Mat DogCloneImg;
resize(DogImg, DogImg, Size(CatImg.cols, CatImg.rows));
DogCloneImg = DogImg;
CatImg.copyTo(DogImg);
imshow("DogImg", DogImg);
imshow("CatImg", CatImg);
imshow("DogCloneImg", DogCloneImg);
waitKey(0);
return 0;
}
/////////-------------
結果圖:
複製方法二(copyTo與原尺寸不相同情況下 )
因為是使用copyto且拿掉resize,所以DogImg與CatImg尺寸不相同 ,因此雖然一樣是使用copyto,但會先建立新的記憶體位置,所以結果會與clone複製一樣,而DogCloneImg尺寸會保持原大小。
複製方法二(copyTo與原尺寸不相同情況下 )
因為是使用copyto且拿掉resize,所以DogImg與CatImg尺寸不相同 ,因此雖然一樣是使用copyto,但會先建立新的記憶體位置,所以結果會與clone複製一樣,而DogCloneImg尺寸會保持原大小。
////-------------------分隔線
#include <cstdio>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(){
Mat DogImg = imread("dog1.jpg", CV_LOAD_IMAGE_COLOR);
Mat CatImg = imread("cat1.jpg", CV_LOAD_IMAGE_COLOR);
Mat DogCloneImg;
//resize(DogImg, DogImg, Size(CatImg.cols, CatImg.rows));
DogCloneImg = DogImg;
CatImg.copyTo(DogImg);
imshow("DogImg", DogImg);
imshow("CatImg", CatImg);
imshow("DogCloneImg", DogCloneImg);
waitKey(0);
return 0;
}
/////////-------------
#include <cstdio>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(){
Mat DogImg = imread("dog1.jpg", CV_LOAD_IMAGE_COLOR);
Mat CatImg = imread("cat1.jpg", CV_LOAD_IMAGE_COLOR);
Mat DogCloneImg;
//resize(DogImg, DogImg, Size(CatImg.cols, CatImg.rows));
DogCloneImg = DogImg;
CatImg.copyTo(DogImg);
imshow("DogImg", DogImg);
imshow("CatImg", CatImg);
imshow("DogCloneImg", DogCloneImg);
waitKey(0);
return 0;
}
/////////-------------
結果圖: