目录
7月19日
思考题
1、OpenCV库与Matlab、halcon的区别?
2、在显示完之后,用不用destroyWindow()有什么区别?
3、png图片格式和jpg图片格式有什么区别?
练习题
1、同时显示两张不同分辨率的图片,对比他们的大小
2、使用Opencv,测试一下你电脑摄像头的分辦率和帧率是多少
3、利用电脑摄像头从外界拍摄一幅自己的图像,添加圆(或其他图形)给自己打码,同时可以通过按键来更改分辨率,并图片右下角添加时间
Halcon与OpenCV都是属于函数库,都提供了多种编程语言访问的接口,而Matlab是个完整的集成开发环境,包括了编辑器、函数库、还有Matlab语言。例如,用MATLAB你可以直接Debug,但是用Halcon和OpenCV相关的代码调试就需要配合IDE才行。
destroyWindow()用于关闭特定的窗口,括号内填写窗口的名字,类型为string
png是无损压缩,可以在PS中重新编辑。jpg格式是一种压缩的图片格式,不能再次编辑,而且在解析度上也是不如png格式。png格式支持透明,而jpg不支持。
#include
#include
#include
using namespace cv;
int main() {
Mat img = imread("/Users/milkman/Desktop/DSC_1678.jpg" , 1);
Mat img1 = imread("/Users/milkman/Desktop/截屏2022-07-19 09.20.00.png" , 1);
printf("图片1的分辨率为:%dx%d\n", img.cols, img.rows);
printf("图片2的分辨率为:%dx%d", img1.cols, img1.rows);
return 0;
}
#include
#include
#include
using namespace cv;
int main() {
VideoCapture capture;
Mat frame;
frame= capture.open("/Users/milkman/Desktop/01.mp4");
int fps = capture.get(CAP_PROP_FPS);
int width = capture.get(CAP_PROP_FRAME_WIDTH);
int height = capture.get(CAP_PROP_FRAME_HEIGHT);
namedWindow("output", WINDOW_AUTOSIZE);
while (capture.read(frame))
{
imshow("output", frame);
char ch = waitKey(30);
if(ch == 27){
break;
}
}
printf("FPS:%d\n", fps);
printf("分辨率为%dx%d",width ,height);
capture.release();
return 0;
}
#include
#include
#include
using namespace cv;
using namespace std;
int main() {
double scale_up_x = 1.0;
double scale_up_y = 1.0;
int i = 1;
Mat scaled_f_up, scaled_f_down;
while(i){
auto t = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
std::stringstream ss;
ss << std::put_time(std::localtime(&t), "%Y-%m-%d-%H:%M:%S");
std::string str_time = ss.str();
Mat pic = imread("/Users/milkman/Desktop/pic1.jpg", 1);
if (pic.empty()) //判断图像文件是否存在
{
std::cout << "读取失败" << std::endl;
return -1;
}
Point p1(900, 900);
putText(pic, "milkman", p1, FONT_HERSHEY_COMPLEX, 2, cv::Scalar(0, 0, 0), 3, 8, 0);
char time = system("time");
putText(pic, str_time, Point(1000, 700), FONT_HERSHEY_COMPLEX, 1, cv::Scalar(0, 0, 0), 3, 8, 0);
rectangle(pic, Point(579, 290), Point(815, 622), cv::Scalar(255, 255, 255), -1);
imshow("test", pic);
waitKey(0);
char ch = waitKey(0);
if(ch == 38){
scale_up_x += 0.1;
resize(pic, scaled_f_up, Size(), scale_up_x, scale_up_y, INTER_LINEAR);
imshow("scaled_f_up", scaled_f_up);
waitKey(0);
}
if(ch == 40){
scale_up_y -= 0.1;
resize(pic, scaled_f_up, Size(), scale_up_x, scale_up_y, INTER_LINEAR);
imshow("scaled_f_up", scaled_f_up);
waitKey(0);
}
if(ch == 27){
break;
}
scanf("%d", &i);
}
return 0;
}
目前除了通过按键调整图像的大小以外,其他功能都已实现。按键功能可能是循环出了问题,还没找到合适的跳出循环的条件,跪求大佬传授经验