实现图像的选装的方法有很多,如果是旋转90,180,270度这种,没必要采用透视变换之类的运算,采用矩阵转置之列的就好,当然也可以采用挨个像素的搬运,那样的话,需要更长的时间调试代码,属于细节的问题,产品落地的时候才有必要关心。
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc.hpp>
using namespace std;
using namespace cv;
//int main()
//{
// Mat img = imread("D:\\3.BMP");
//
// namedWindow("raw");
// imshow("raw",img);
// waitKey(0);
//
// return 0;
//}
int main()
{
VideoCapture cap;
cap.open(0);
if (!cap.isOpened())
{
std::cerr << "Could not openc capture." << std::endl;
return -1;
}
cv::Mat frame;
int key;
//cap.set(CV_CAP_PROP_FRAME_WIDTH, 800);
//cap.set(CV_CAP_PROP_FRAME_HEIGHT, 600);
cap.set(CV_CAP_PROP_FRAME_WIDTH, 1920);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 1080);
for (;;)
{
cap >> frame;
if (frame.empty()) break;
cv::transpose(frame, frame);
cv::flip(frame, frame, 0);
key = waitKey(100);
if (32 == key)
{
imwrite("D:\\img.jpg", frame);
}
if (27 == key)
{
cap.release();
break;
}
resize(frame, frame, Size(960 * 1080 / 1920, 960));
cv::imshow("raw", frame);
}
return 0;
}