我想在OpenCV
(C++
)上將JPG
圖像讀爲CV_16UC1
。如何將JPG圖像讀取爲CV_16UC1並在屏幕上打印?
我也可以從CV_8UC3
轉換爲CV_16UC1
。
下面這段代碼的工作,但在這裏它僅使用CV_8UC3
格式,這是不是我所需要:
using namespace cv;
int main()
{
Mat im1 = imread("MyPic.JPG");
Mat im2 = imread("MyPic.JPG");
Size sz1 = im1.size();
Size sz2 = im2.size();
Mat final(sz1.height, sz1.width + sz2.width, CV_8UC3);
Mat left(final, Rect(0, 0, sz1.width, sz1.height));
im1.copyTo(left);
Mat right(final, Rect(sz1.width, 0, sz2.width, sz2.height));
im2.copyTo(right);
imshow("final", final);
waitKey(0);
return 0;
}
但我需要使用CV_16UC1
(這是真的必要!)。因此,我已經轉換是這樣的:
cv::Mat im2 = cv::imread("MyPic.jpg");
cv::Size sz2 = im2.size();
cv::Mat im3; // I want im3 to be the CV_16UC1 of im2
im2.convertTo(im3, CV_16UC1);
cv::Size sz3 = im3.size();
cv::Mat im1 = cv::imread("MyPic.jpg");
cv::Size sz1 = im1.size();
cv::Mat im4;
im4.convertTo(im1, CV_16UC1);
cv::Size sz4 = im4.size();
// Two images by each other side - this must be CV_16UC1
cv::Mat final(sz1.height, sz1.width + sz2.width, CV_16UC1);
// The left image
cv::Mat left(final, cv::Rect(0, 0, sz1.width, sz1.height));
im1.copyTo(left);
// The right image
cv::Mat right(final, cv::Rect(sz1.width, 0, sz2.width, sz2.height));
im4.copyTo(right);
cv::imshow("final", final);
cv::waitKey(0);
看來我做錯事的convertions還是我讀的方式,因爲沒有圖像出現在屏幕上。
如何正確地從CV_8UC3
轉換爲CV_16UC1
?
您可以退後一步,也許可以解釋*爲什麼*您認爲您需要從8位JPEG製作16位圖像?可能有其他選擇可以更好地滿足您的需求。 –